Как создать стандартные кнопки Borderless (как указано в руководстве по проектированию)?
Я просто проверял рекомендации по дизайну и задавался вопросом о кнопках без полей. Я очнулся и попытался найти в источнике, но не смог собрать его сам. Является ли это обычным виджетами Button, но вы добавляете собственный стиль (Android по умолчанию)? Как сделать эти кнопки без полей (конечно, вы можете установить фон пустым, но тогда у меня нет разделителя)?
Здесь ссылки на руководящие принципы проектирования:
- http://developer.android.com/design/building-blocks/buttons.html
- http://developer.android.com/guide/topics/ui/controls/button.html#Borderless
- Как отключить кнопку Android?
- установка n изображений с переменной высотой на 3 (аналогичная длина) компоновки столбцов
- Установите абсолютное положение вида
- Android - использование view.setX () и setY в api 8
- Как заставить весь макет просмотреть обновление?
- Получить размеры экрана в пикселях
- Bootstrap 4.0 Макет компоновки сетки не работает
- Разделитель Android / разделитель линии в макете?
- Использование пользовательского шрифта в Android
- Как получить высоту кнопки, чтобы соответствовать высоте другого элемента?
- В чем разница между fill_parent и wrap_content?
- Android: альтернативный макет xml для ландшафтного режима
- Как увеличить высоту макета с помощью анимации?
Чтобы устранить некоторую путаницу:
Это делается в 2 этапа: установка атрибута фона кнопки для android: attr / selectableItemBackground создает вам кнопку с обратной связью, но без фона.
android:background="?android:attr/selectableItemBackground"
Линия, чтобы разделить кнопку без полей от остальной части вашего макета, сделана с представлением с фоном android: attr / dividerVertical
android:background="?android:attr/dividerVertical"
Для лучшего понимания здесь находится макет кнопки OK / Cancel без полей в нижней части экрана (как на рисунке справа).
Просто добавьте следующий атрибут стиля в свой тег Button
:
style="?android:attr/borderlessButtonStyle"
источник: http://developer.android.com/guide/topics/ui/controls/button.html#Borderless
Затем вы можете добавить разделители, как в ответе Карла .
Поздний ответ, но многие мнения. Поскольку API <11 еще не умер, для тех, кого это интересует, это трюк.
Пусть ваш контейнер имеет желаемый цвет (может быть прозрачным). Затем дайте кнопкам селектор с прозрачным цветом по умолчанию и некоторым цветом при нажатии. Таким образом, у вас будет прозрачная кнопка, но при нажатии будет изменен цвет (например, голо). Вы также можете добавить анимацию (например, holo’s). Селектор должен выглядеть примерно так:
res/drawable/selector_transparent_button.xml
И кнопка должна иметь android:background="@drawable/selector_transparent_button"
PS: пусть у вас есть разделители ( android:divider='@android:drawable/...
для API <11)
PS [Newbies]: вы должны определить эти цвета в значениях / colors.xml
Для тех, кто хочет кнопки без полей, но все же анимированные при нажатии. Добавьте это в кнопку.
style="?android:attr/borderlessButtonStyle"
Если вам нужен разделитель / линия между ними. Добавьте это в линейную компоновку.
style="?android:buttonBarStyle"
Резюме
Для стиля материала добавьте style="@style/Widget.AppCompat.Button.Borderless"
при использовании библиотеки AppCompat.
Из источника iosched app я придумал этот class ButtonBar
:
/** * An extremely simple {@link LinearLayout} descendant that simply reverses the * order of its child views on Android 4.0+. The reason for this is that on * Android 4.0+, negative buttons should be shown to the left of positive buttons. */ public class ButtonBar extends LinearLayout { public ButtonBar(Context context) { super(context); } public ButtonBar(Context context, AttributeSet attributes) { super(context, attributes); } public ButtonBar(Context context, AttributeSet attributes, int def_style) { super(context, attributes, def_style); } @Override public View getChildAt(int index) { if (_has_ics) // Flip the buttons so that "OK | Cancel" becomes "Cancel | OK" on ICS return super.getChildAt(getChildCount() - 1 - index); return super.getChildAt(index); } private final static boolean _has_ics = Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH; }
Это будет LinearLayout
, в которое LinearLayout
«ОК» и «Отмена», и будет обрабатывать их в соответствующем порядке. Затем поместите это в макет, который вы хотите, кнопки в:
?
Это дает вам вид диалога с кнопками без полей. Эти атрибуты можно найти в res в рамках. buttonBarStyle
делает вертикальный делитель и дополнение. buttonBarButtonStyle
задается как buttonBarButtonStyle
для Holo, но я считаю, что это должен быть самый надежный способ отображения, поскольку инфраструктура хочет отобразить его.
Изучите атрибуты темы buttonBarStyle
, buttonBarButtonStyle
и buttonBarButtonStyle
.
Вы также можете сделать кнопки без полей через код:
TypedValue value= new TypedValue(); getApplicationContext().getTheme().resolveAttribute(android.R.attr.selectableItemBackground, value, true); myButton.setBackgroundResource(value.resourceId);
Для тех, кто хочет создать кнопку без полей программно для API> = 8
ImageButton smsImgBtn = new ImageButton(this); //Sets a drawable as the content of this button smsImgBtn.setImageResource(R.drawable.message_icon); //Set to 0 to remove the background or for bordeless button smsImgBtn.setBackgroundResource(0);
Еще одно решение, которое должно работать как на старой, так и на новой платформе Android, – это использовать
android:background="@android:color/transparent"
атрибут для представления Button. Но после добавления выше строки кнопка не будет поддерживать сенсорную обратную связь.
Чтобы обеспечить обратную связь, добавьте следующий код в class Activity
button.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: ((Button)view).setBackgroundColor(Color.LTGRAY); break; case MotionEvent.ACTION_UP: ((Button)view).setBackgroundColor(Color.TRANSPARENT); } return false; } });
Его работа прекрасна для меня.
Для тех, кто все еще ищет:
наследуйте свой стиль для кнопок Holo:
или Холо Света:
и для кнопок Holo без полей:
или Холо Света:
Используйте приведенный ниже код в вашем XML-файле. Используйте android: background = “# 00000000”, чтобы иметь прозрачный цвет.
Вы можете использовать библиотеку поддержки AppCompat для кнопки Borderless.
Вы можете сделать Borderless Button следующим образом:
Вы можете сделать Borderless Colored Button следующим образом:
Это значит, что вы произвольно создаете безграничную (плоскую) кнопку без использования 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);
По какой-то причине ни для меня не работал ни 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:
Обычная голова через стену подходит.
Отличное слайд-шоу о том, как добиться желаемого эффекта от Googles Nick Butcher (начало на слайде 20). Он использует стандартный андроид @attr
для @attr
кнопки и разделителя.
Добавляя к верхнему ответу, вы также можете использовать представления с темно-серым цветом фона в линейной компоновке.
Если ваша линия горизонтальная, вы хотите установить высоту в 1dip и ширину в соответствии с родительской и наоборот, если ваша линия вертикальна.
Если вы хотите добиться того же программно:
(это 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 btn= new Button(this); btn.setText("HI"); btn.setBackground(null);