Как создать стандартные кнопки без полей (как в упомянутой директиве по дизайну)? - PullRequest
110 голосов
/ 13 января 2012

Я просто проверял рекомендации по дизайну и интересовался кнопками без полей. Я поглядел и попытался найти в источнике, но не могу собрать это сам. Это обычный виджет кнопки, но вы добавляете собственный стиль (по умолчанию для Android)? Как сделать эти кнопки без полей (конечно, вы можете установить фон пустым, но тогда у меня нет делителя)?

Здесь приведены ссылки на рекомендации по проектированию:

enter image description here

Ответы [ 19 ]

2 голосов
/ 30 июня 2014

Для тех, кто все еще ищет:

унаследуйте свой собственный стиль для кнопок Holo:

<style name="yourStyle" parent="@android:style/Holo.ButtonBar">
  ...
</style>

или Holo Light:

<style name="yourStyle" parent="@android:style/Holo.Light.ButtonBar">
  ...
</style>

и для кнопок Holo без полей:

<style name="yourStyle" parent="@android:style/Widget.Holo.Button.Borderless.Small">
  ...
</style>

или Holo Light:

<style name="yourStyle" parent="@android:style/Widget.Holo.Light.Button.Borderless.Small">
  ...
</style>
1 голос
/ 06 декабря 2016

Вы можете использовать Библиотека поддержки AppCompat для кнопки без полей.

Вы можете сделать кнопку без полей следующим образом:

<Button
    style="@style/Widget.AppCompat.Button.Borderless"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="16dp" 
    android:text="@string/borderless_button"/>

Вы можете сделать цветную кнопку без полей какэто:

<Button
    style="@style/Widget.AppCompat.Button.Borderless.Colored"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="16dp" 
    android:text="@string/borderless_colored_button"/>
1 голос
/ 27 сентября 2017

Это то, как вы создаете кнопку без рамки (плоскую) программно без использования XML

ContextThemeWrapper myContext = new ContextThemeWrapper(this.getActivity(), 
   R.style.Widget_AppCompat_Button_Borderless_Colored);

Button myButton = new Button(myContext, null, 
   R.style.Widget_AppCompat_Button_Borderless_Colored);
1 голос
/ 17 февраля 2015

Используйте приведенный ниже код в вашем XML-файле. Используйте android: background = "# 00000000", чтобы иметь прозрачный цвет.

<Button
   android:id="@+id/btnLocation"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:background="#00000000"
   android:text="@string/menu_location"
   android:paddingRight="7dp"
/>
0 голосов
/ 04 июля 2018

Попробуйте этот код, чтобы удалить фоновый объект drawable (@ drawable / bg) программным способом, просто нам нужно указать значение null в качестве параметра.

Button btn= new Button(this);
btn.setText("HI");
btn.setBackground(null);
0 голосов
/ 23 мая 2017

Если вы хотите достичь того же самого программно:

(это C #, но легко переносимый на Java)

Button button = new Button(new ContextThemeWrapper(Context, Resource.Style.Widget_AppCompat_Button_Borderless_Colored), null, Resource.Style.Widget_AppCompat_Button_Borderless_Colored);

Соответствие

    <Button
       style="@style/Widget.AppCompat.Button.Borderless.Colored"
    .../>
0 голосов
/ 11 марта 2016

Добавив к верхнему ответу, вы также можете использовать представления с темно-серым фоновым цветом в линейном макете, например, так.

<View
    android:layout_width="match_parent"
    android:layout_height="1dip"
    android:layout_marginBottom="4dip"
    android:layout_marginLeft="4dip"
    android:layout_marginRight="4dip"
    android:layout_marginTop="4dip"
    android:background="@android:color/darker_gray"/>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="4dip"
    android:orientation="horizontal"
    android:weightSum="1">

    <Button
        android:id="@+id/button_decline"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_weight="0.50"
        android:background="?android:attr/selectableItemBackground"
        android:padding="10dip"
        android:text="@string/decline"/>

    <View
        android:layout_width="1dip"
        android:layout_height="match_parent"
        android:layout_marginLeft="4dip"
        android:layout_marginRight="4dip"
        android:background="@android:color/darker_gray"/>

    <Button
        android:id="@+id/button_accept"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="10dp"
        android:layout_weight="0.50"
        android:background="?android:attr/selectableItemBackground"
        android:padding="10dip"
        android:text="@string/accept"/>
</LinearLayout>

Если ваша линия горизонтальная, вам нужно установить высоту 1dip и ширину, чтобы соответствовать родителю, и наоборот, если ваша линия вертикальная.

0 голосов
/ 19 января 2014

Отличное слайд-шоу на , как добиться желаемого эффекта от Гугла Ника Батчера (начало на слайде 20).Он использует стандартный андроид @attr для стилизации кнопки и разделителя.

0 голосов
/ 19 апреля 2012

Почему-то у меня не работали ни style="Widget.Holo.Button.Borderless", ни android:background="?android:attr/selectableItemBackground". Чтобы быть более точным, Widget.Holo.Button.Borderless сделал работу на Android 4.0, но не работал на Android 2.3.3. Что меня устроило в обеих версиях, так это android:background="@drawable/transparent" и этот XML в res / drawable / transparent.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" >
</shape>

Обычная голова сквозь стену.

...