Ich verwende das AppCompat-Design und möchte das minHeight-Attribut für meine Schaltflächen festlegen:
<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>
Es gibt jedoch keinen Widget.AppCompat.Button
-Stil, der als übergeordnetes Element für MyButtonStyle
festgelegt werden kann. Wenn ich Android:Widget.Button
verwende, sehen alle meine Schaltflächen wie der alte beschissene Stil aus. Ich habe verschiedene andere AppCompat-Themes wie TextAppearance.AppCompat.Button
ausprobiert, aber sie funktionieren nicht.
Wenn Sie ein übergeordnetes Thema für den Schaltflächenstil weglassen, wird die Schaltfläche auch nicht richtig formatiert.
Wie kann ich den Standard Theme.AppCompat
buttonStyle
anpassen?
Sie können Base.MyButtonStyle
auf API 14+ (in Android:Widget.Holo.Button
) und res/values-v14/styles.xml
auf API 21+ (in Android:Widget.Material.Button
) res/values-v21/styles.xml
erweitern. Dieser Stil ändert sich je nach Version des Gerätesystems. Fügen Sie hier Ihre plattformspezifischen Änderungen ein.
Dann MyButtonStyle
Base.MyButtonStyle
erweitern und hier den Android:minHeight
definieren (in res/values/styles.xml
). Dies gilt für alle Plattformen.
Ihre Schaltflächen können dann den Stil MyButtonStyle
verwenden.
In diesem Beispiel wird davon ausgegangen, dass Ihr Mindest-SDK 14 beträgt.
Und ja, es gibt keine Appcompat-v7-Schaltfläche (zumindest noch nicht).
EDIT
Dies setzt voraus, dass Sie mit dem Holo-Button auf Plattformen älter als Lollipop sind. Es fühlt sich unaufdringlich an und wenn man ohne Wellen auskommt, sollte es gut sein. Wenn Sie Wellen wollen, schlage ich vor, Sie suchen eine Lollipop-Schaltflächenbibliothek von Drittanbietern.
Um meine eigene Frage zu beantworten, wird angezeigt, dass AppCompat unterstützt derzeit nicht das Button
-Widget:
AppCompat bietet in früheren Versionen von Android Ein ähnliches Verhalten für eine Teilmenge von UI-Widgets:
- Alles, was in der Symbolleiste von AppCompat bereitgestellt wird (Aktionsmodi usw.)
- Text bearbeiten
- Spinner
- CheckBox
- Radio knopf
- Switch (verwenden Sie die neue Android.support.v7.widget.SwitchCompat)
- CheckedTextView
Die einzige Problemumgehung, die ich sehe, wäre, den Material-Schaltflächenstil aus dem Android-Quellcode neu zu erstellen, eine Aufgabe, die über den Rahmen meines Wunsches hinausgeht.
Benutzerdefinierter Schaltflächenstil Mit AppCompat +22 In Ihrer 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>
in Ihrer 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" />
Mit new MaterialComponent ist es bequem, com.google.Android.material.button.MaterialButton
anstelle von normalem Button
.
Aber um es zu stylen, wird das andere Attribut im Theme verwendet - materialButtonStyle
, mit diesem übergeordneten Theme Theme.MaterialComponents.DayNight.NoActionBar
.
Dann sollte das Thema so aussehen:
<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>
Und in ButtonStyle
können Sie Schaltflächenattribute wie folgt ändern:
<style name="ButtonStyle" parent="Widget.MaterialComponents.Button.UnelevatedButton">
<item name="Android:minHeight">60dp</item>
</style>
Entfernen Sie den Android:
<style name="Theme.MyTheme" parent="Theme.AppCompat">
<item name="buttonStyle">@style/MyButtonStyle</item>
</style>