Как создать кнопки без полей в Android

Руководства по дизайну Android говорят использовать кнопки без полей (см. рисунок ниже), но на самом деле не объясняют, как это сделать. Кто-то задал этот же вопрос несколько недель назад здесь: Как создать стандартные кнопки Borderless (как в упомянутом руководстве по дизайну)?, и был ответ, обозначенный как "ответ, но я все еще потерян, и я не вижу способа добавить комментарии к вопросу, который был" закрыт"

Ответчик сказал

"Посмотрите на атрибуты темы buttonBarStyle, buttonBarButtonStyle и borderlessButtonStyle"

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

enter image description here

Ответ 1

Мне показалось, что я решил это, когда я посмотрел здесь несколько недель назад и заметил ответ об использовании прозрачного фона, но он недостаточно хорош, потому что он предотвращает выделение кнопки при нажатии.

Кроме того, установка стиля на Widget.Holo.Button.Borderless не подходит, поскольку делает границы кнопок большими.

Чтобы понять это раз и навсегда, я проверяю исходный код Android для стандартного приложения Calendar и обнаружил, что он использует следующее:

android:background="?android:attr/selectableItemBackground"

Выполнение этого способа гарантирует, что кнопка без полей и правильный размер.

Ответ 3

Если вы используете ActionbarSherlock...

<Button 
  android:id="@+id/my_button" 
  style="@style/Widget.Sherlock.ActionButton" />

Ответ 4

Несколько дней назад снова наткнулся на это.

Здесь мое решение:

Это делается в 2 этапа: установка атрибута фона кнопки android: attr/selectableItemBackground создает кнопку с обратной связью, но не имеет фона.

android:background="?android:attr/selectableItemBackground"

Линия для разделения кнопки без полей на остальной части вашего макета выполняется с помощью представления с фоном android: attr/dividerVertical

android:background="?android:attr/dividerVertical"

Для лучшего понимания здесь находится макет комбинации кнопок ОК/Отмена без полей внизу экрана (например, на правом рисунке выше).

<RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:layout_alignParentBottom="true">
        <View
            android:layout_width="match_parent"
            android:layout_height="1dip"
            android:layout_marginLeft="4dip"
            android:layout_marginRight="4dip"
            android:background="?android:attr/dividerVertical"
            android:layout_alignParentTop="true"/>
        <View
            android:id="@+id/ViewColorPickerHelper"
            android:layout_width="1dip"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="4dip"
            android:layout_marginTop="4dip"
            android:background="?android:attr/dividerVertical" 
            android:layout_centerHorizontal="true"/>
        <Button
            android:id="@+id/BtnColorPickerCancel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_toLeftOf="@id/ViewColorPickerHelper"
            android:background="?android:attr/selectableItemBackground"
            android:text="@android:string/cancel" 
            android:layout_alignParentBottom="true"/>
        <Button
            android:id="@+id/BtnColorPickerOk"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:background="?android:attr/selectableItemBackground"
            android:text="@android:string/ok" 
            android:layout_alignParentBottom="true" 
            android:layout_toRightOf="@id/ViewColorPickerHelper"/>
    </RelativeLayout>

Ответ 5

Этот код работает для меня:

<View
    android:layout_width="match_parent"
    android:layout_height="1dip"
    android:background="?android:attr/dividerVertical" />

<LinearLayout
    style="?android:attr/buttonBarStyle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:measureWithLargestChild="true"
    android:orientation="horizontal"
    android:paddingLeft="2dip"
    android:paddingRight="2dip"
    android:paddingTop="0dip" >

    <Button
        android:id="@+id/cancel"
        style="?android:attr/buttonBarButtonStyle"
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:onClick="onClickCancel"
        android:text="@string/cancel" />

     <Button
        android:id="@+id/info"
        style="?android:attr/buttonBarButtonStyle"
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:onClick="onClickInfo"
        android:visibility="gone"
        android:text="@string/info" />

    <Button
        android:id="@+id/ok"
        style="?android:attr/buttonBarButtonStyle"
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:onClick="onClickSave"
        android:text="@string/save" />
</LinearLayout>

Я покажу 3 кнопки внизу

Ответ 6

android:background="@android:color/transparent"

Ответ 7

<Button android:id="@+id/my_button" style="@android:style/Widget.Holo.Button.Borderless" />