Как настроить стиль кнопки "Материал приложения AppCompat"?
Я использую тему AppCompat, и я хочу установить атрибут minHeight на мои кнопки:
<style name="Theme.MyTheme" parent="Theme.AppCompat">
<item name="android:buttonStyle">@style/MyButtonStyle</item>
</style>
<style name="MyButtonStyle" parent="...?">
<item name="android:minHeight">60dp</item>
</style>
Однако стиль Widget.AppCompat.Button
не установлен в качестве родителя для MyButtonStyle
. Если я использую android:Widget.Button
, то все мои кнопки выглядят как старый дерьмовый стиль. Я пробовал разные темы для AppCompat, такие как TextAppearance.AppCompat.Button
, но они не работают.
Если оставить родительскую тему для стиля кнопки, это также приведет к правильной стилизации кнопки.
Как настроить по умолчанию Theme.AppCompat
buttonStyle
?
Ответы
Ответ 1
Вы можете Base.MyButtonStyle
расширить android:Widget.Holo.Button
на API 14+ (в res/values-v14/styles.xml
) и android:Widget.Material.Button
на API 21+ (в res/values-v21/styles.xml
). Этот стиль изменится в соответствии с версией системы устройства. здесь возможны конкретные модификации платформы.
Затем MyButtonStyle
продолжаем Base.MyButtonStyle
и определяем android:minHeight
здесь (в res/values/styles.xml
). Это применимо ко всем платформам.
Затем вы можете использовать стиль MyButtonStyle
.
В этом примере предполагается, что ваш минимальный SDK равен 14.
И да, нет стиля кнопки appcompat-v7 (ну, по крайней мере, пока нет).
ИЗМЕНИТЬ
Это предполагает, что с помощью кнопки Holo на платформах старше Lollipop. Он чувствует себя ненавязчивым, и если вы можете обойтись без рябь, это должно быть просто прекрасно. Если вы хотите рябь, я предлагаю вам Google для третьей библиотеки кнопок с леденцом.
Ответ 2
Чтобы ответить на мой собственный вопрос, появляется AppCompat фактически не поддерживает виджет Button
в настоящее время:
AppCompat обеспечивает аналогичное поведение в более ранних версиях Android для подмножества виджета пользовательского интерфейса:
- Все, что предусмотрено панелью инструментов AppCompats (режимы действия и т.д.)
- EditText
- Spinner
- CheckBox
- RadioButton
- Switch (используйте новый файл android.support.v7.widget.SwitchCompat)
- CheckedTextView
Единственным обходным решением, которое я вижу, было бы воссоздание стиля кнопки "Материал" из исходного кода Android, задачи, которая выходит за рамки моего желания.
Ответ 3
Пользовательский стиль кнопки с AppCompat +22
в ваших styles.xml
<style name="Button.Tinted" parent="Widget.AppCompat.Button">
<item name="colorButtonNormal">YOUR_TINT_COLOR</item>
<item name="colorControlHighlight">@color/colorAccent</item>
<item name="android:textColor">@android:color/white</item> </style>
в вашем layout.xml
<Button
android:id="@+id/but_next"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/but_continue"
android:theme="@style/Button.Tinted" />
Ответ 4
Удалите android:
<style name="Theme.MyTheme" parent="Theme.AppCompat">
<item name="buttonStyle">@style/MyButtonStyle</item>
</style>
fooobar.com/questions/108903/...
Ответ 5
С новым MaterialComponent удобно использовать com.google.android.material.button.MaterialButton
вместо обычного Button
.
Но для стилизации в теме используется другой атрибут
- materialButtonStyle
, с этой родительской темой Theme.MaterialComponents.DayNight.NoActionBar
.
Тогда тема должна выглядеть так:
<style name="NewAppTheme"
parent="Theme.MaterialComponents.DayNight.NoActionBar">
.......
<-- IMPORTANT if you are using com.google.android.material.button.MaterialButton to style them use this parameter
<item name="materialButtonStyle">@style/ButtonStyle</item>
</style>
И в ButtonStyle
вы можете изменить атрибуты кнопки следующим образом:
<style name="ButtonStyle" parent="Widget.MaterialComponents.Button.UnelevatedButton">
<item name="android:minHeight">60dp</item>
</style>