wake-up-neo.com

Wie kann ich den AppCompat Material Button Style anpassen?

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.AppCompatbuttonStyle anpassen?

11
Jeff Mixon

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 MyButtonStyleBase.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.

3
Eugen Pechanec

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.

4
Jeff Mixon

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" />
2
ingyesid

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>
0

Entfernen Sie den Android:

<style name="Theme.MyTheme" parent="Theme.AppCompat">
    <item name="buttonStyle">@style/MyButtonStyle</item>
</style>

https://stackoverflow.com/a/32363833

0