Как создать кнопки без полей в Android
Руководства по дизайну Android говорят использовать кнопки без полей (см. рисунок ниже), но на самом деле не объясняют, как это сделать. Кто-то задал этот же вопрос несколько недель назад здесь: Как создать стандартные кнопки Borderless (как в упомянутом руководстве по дизайну)?, и был ответ, обозначенный как "ответ, но я все еще потерян, и я не вижу способа добавить комментарии к вопросу, который был" закрыт"
Ответчик сказал
"Посмотрите на атрибуты темы buttonBarStyle
, buttonBarButtonStyle
и borderlessButtonStyle
"
но я до сих пор не могу понять, как на самом деле использовать эти вещи. Я немного погубил и не мог найти ничего, поэтому решил, что я просто задам этот вопрос еще раз, и, надеюсь, кто-то может дать немного больше подробностей о том, как это работает.
![enter image description here]()
Ответы
Ответ 1
Мне показалось, что я решил это, когда я посмотрел здесь несколько недель назад и заметил ответ об использовании прозрачного фона, но он недостаточно хорош, потому что он предотвращает выделение кнопки при нажатии.
Кроме того, установка стиля на Widget.Holo.Button.Borderless
не подходит, поскольку делает границы кнопок большими.
Чтобы понять это раз и навсегда, я проверяю исходный код Android для стандартного приложения Calendar и обнаружил, что он использует следующее:
android:background="?android:attr/selectableItemBackground"
Выполнение этого способа гарантирует, что кнопка без полей и правильный размер.
Ответ 2
Посмотрите на это: http://developer.android.com/guide/topics/ui/controls/button.html#Borderless
Атрибут вашего тега Button
или ImageButton
:
style="?android:attr/borderlessButtonStyle"
Ответ 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" />
Ответ 8
Вы также должны установить поля и дополнение изображения к 0.
Также посмотрите на второй, не отмеченный ответ на Как создать стандартные кнопки Borderless (как в упомянутом руководстве по дизайну)?