Кнопки Android без полей

Я ненавижу быть третьим человеком, который спрашивает об этом, но предыдущий два вопросы не t, казалось, ответил на него полностью. В рекомендациях по дизайну для Android подробно описаны кнопки без полей, но не описано, как их сделать. В одном из предыдущих ответов было предложено использовать:

style="@android:style/Widget.Holo.Button.Borderless"

Это хорошо работает для темы Holo, но я также часто использую Holo.Light и

style="@android:style/Widget.Holo.Light.Button.Borderless"

Кажется, не существует. Есть ли способ применить стиль для таких кнопок без полей в Holo.Light или, что еще лучше, просто применить тег без полей, не указывая, к какой теме он принадлежит, чтобы приложение могло выбрать правильный стиль во время выполнения?

Holo.ButtonBar, кажется, отвечает всем требованиям для того, что я ищу, за исключением того, что он не дает обратной связи с пользователем о том, что он был нажат.

Кроме того, есть ли в документации место, в котором перечислены такие стили, которые можно применять, и их описание? Сколько ни гуглил, ни копался в документах, ничего не нашел. Если я щелкну правой кнопкой мыши и отредактирую стиль, появится просто не описательный список.

Любая помощь будет оценена по достоинству.

Изменить: получил идеальный ответ от javram, и я хотел добавить XML для всех, кто заинтересован в добавлении частичных границ, принятых Google.

Для горизонтального делителя это прекрасно работает

<View
    android:id="@+id/horizontal_divider_login"
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:background="@color/holo_blue" />

а это для вертикального:

<View
     android:id="@+id/vertical_divider"
     android:layout_width="1dip"
     android:layout_height="match_parent"
     android:layout_marginBottom="8dp"
     android:layout_marginTop="8dp"
     android:background="@color/holo_blue" />

person The Holo Dev    schedule 14.03.2012    source источник


Ответы (5)


Посмотрите мой ответ здесь. В двух словах правильное решение состоит в том, чтобы использовать следующее:

android:background="?android:attr/selectableItemBackground"
person Paul Drummond    schedule 30.03.2012
comment
@Xdg это будет работать, если вы используете HolloEveywhere: github.com/Prototik/HoloEverywhere - person Felipe Caldas; 19.05.2013
comment
Если вы используете библиотеку AppCompat, удалите префикс android: и он будет работать: android:background=?attr/selectableItemBackground - person Aron Lorincz; 29.05.2014

Просто добавьте следующий атрибут стиля в свой тег Button:

style="?android:attr/borderlessButtonStyle"

источник: http://developer.android.com/guide/topics/ui/controls/button.html#Borderless

person Diego V    schedule 18.08.2012
comment
Это хороший ответ, но имейте в виду, что атрибут был добавлен в API 11. - person jason gilbert; 06.03.2013
comment
И borderlessButtonStyle устанавливает фон для selectableItemBackground и устанавливает некоторые отступы, не более того. - person Anderson; 17.04.2014

Рискуя побить дохлую лошадь, вот еще один (возможно, лучший) вариант. AppCompat v7 определяет стиль кнопок без полей. Если вы уже используете библиотеку AppCompat, просто сделайте это:

<Button android:text="@string/borderlessButtonText" style="@style/Widget.AppCompat.Button.Borderless" />

person wtracy    schedule 03.06.2016

Этот код удалит весь фон для кнопки:

android:background="@android:color/transparent"
person javram    schedule 14.03.2012
comment
Это кажется ответом, который слишком прост, чтобы ответить на 3 вопроса, но он точно делает свое дело. Кроме того, для тех, кто увидит это позже и заинтересуется, чтобы получить полуграницы, принятые Google, я добавил некоторый код, который сработал для меня, в первый пост, поскольку код публикации в подответах трудно читать. - person The Holo Dev; 14.03.2012
comment
Я помню, как думал о том же, когда пытался понять это. Я использую его как гиперссылку, что должно было быть относительно простой задачей, или я так думал... - person javram; 14.03.2012
comment
Я не получаю обратную связь от пользователя при нажатии кнопки без полей. Без изюминки и прочего. Я что-то пропустил? - person Konsumierer; 02.02.2013
comment
@dead Я не понимаю требования API 11. Мой минимум установлен на 10. - person bradj; 21.03.2013

На всякий случай, если кто-то ищет легкое решение, чтобы получить кнопку без полей для API, которые не поддерживают тему Holo (как я делал в течение длительного времени), я публикую свое решение ниже:

<View 
    android:layout_height="1dp"
    android:layout_width="match_parent"
    android:background="#505154"
    android:layout_marginLeft="10dp" android:layout_marginRight="10dp"/>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <Button
        android:id="@+id/btn_Reply"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="1"
        android:background="@android:color/transparent"
        android:paddingBottom="15dp" android:paddingTop="15dp"
        android:textColor="#5c5966"
        android:text="@string/btnReplyText"/>

    <View 
        android:layout_height="fill_parent"
        android:layout_width="1dp"
        android:background="#505154" 
        android:layout_marginBottom="7dp" android:layout_marginTop="7dp"/>

    <Button
        android:id="@+id/btn_Delete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="1"
        android:paddingBottom="15dp" android:paddingTop="15dp"
        android:textColor="#5c5966"
        android:background="@android:color/transparent"
        android:text="@string/btnDeleteText" />

    <View 
        android:layout_height="fill_parent"
        android:layout_width="1dp"
        android:background="#505154"
        android:text="@string/btnReplyText"
        android:layout_marginBottom="7dp" android:layout_marginTop="7dp" />

    <Button
        android:id="@+id/btn_Exit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:layout_gravity="center"
        android:text="@string/btnExitText"
        android:paddingBottom="15dp" android:paddingTop="15dp"
        android:textColor="#5c5966"
        android:background="@android:color/transparent"/>
</LinearLayout>

Все, что вам нужно сделать, это изменить цвета и текст в соответствии с вашим фоном. Всего наилучшего!

person Anirudh    schedule 07.06.2013