Ich habe values:styles.xml
mit:
<style name="AppTheme.Button" parent="Base.Widget.AppCompat.Button">
<item name="colorButtonNormal">@color/my_color</item>
<item name="android:textColor">@android:color/white</item>
</style>
und values-v21:styles.xml
mit:
<style name="AppTheme.Button" parent="Base.Widget.AppCompat.Button">
<item name="android:colorButtonNormal">@color/my_color</item>
<item name="android:textColor">@android:color/white</item>
</style>
Und App-Stil mit
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:buttonStyle">@style/AppTheme.Button</item>
</style>
Aber die Farben erscheinen grau statt @color/my_color
android
android-appcompat
Daniel Gomez Rico
quelle
quelle
Antworten:
Um nur eine Schaltfläche anzupassen, setzen Sie android: theme = "@ style / AppTheme.Button" auf Ihre Schaltfläche.
<Button android:theme="@style/AppTheme.Button" />
Definieren Sie Ihren Stil wie in Ihrer Frage
<style name="AppTheme.Button" parent="Base.Widget.AppCompat.Button"> <item name="colorButtonNormal">@color/my_color</item> </style>
[BEARBEITEN]
Siehe GitHub-Demo hier
quelle
Verwenden Sie
Widget.AppCompat.Button.Colored
als Eltern für Ihren Stil.<style name="RedButton" parent="Widget.AppCompat.Button.Colored"> <item name="android:textColor">@color/white</item> <item name="colorButtonNormal">@color/red</item> </style>
Verwenden Sie
android:theme
, nichtstyle
in Schaltflächendefinitionen:<Button android:theme="@style/RedButton"/>
Siehe AppCompat v21> Theming und Android Support Library v22.1 - AppCompat- Blogbeiträge. (Hinweis zum zweiten Beitrag,
android:theme
wird von API11 unterstützt - er führt nur keine automatische Vererbung vom Elternteil durch. Sie müssen ihn für jedes Kind angeben, hier kein Problem, aber erwähnenswert - siehe Chris Banes ' Beitrag dazu).quelle
Widget.AppCompat.Button.Colored
?android:colorButtonNormal
Fügen Sie die XML-Zeile unten in Ihre "AppTheme" -Xml ein, anstatt zu versuchen, sie über den "AppTheme.Button" festzulegen. Dies funktioniert für mich unter Version 22.1.1 mit Geräten ohne Lutscher. Ich vermute, dies ist ein Fehler, da Ihre obige Lösung für Lollipop gut funktioniert.
<item name="colorButtonNormal">@color/my_color</item>
quelle
Stellen Sie sicher, dass Ihre
Activity
erweitert wirdAppCompatActivity
, da sonst die appCompat-Stile nicht ordnungsgemäß verarbeitet werden.android.support.v7.app.AppCompatActivity
compile 'com.android.support:appcompat-v7:23.0.1'
quelle
Verwenden:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="buttonStyle">@style/AppTheme.Button</item> </style>
entferne das
android:
quelle
Das funktioniert:
<!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <!-- android:buttonStyle for v21+ and buttonStyle for the rest --> <item name="buttonStyle">@style/MyCustomButton</item> <item name="android:buttonStyle">@style/MyCustomButton</item> <item name="colorButtonNormal">@color/my_color</item> </style> <style name="MyCustomButton" parent="Base.Widget.AppCompat.Button"> <item name="android:textColor">#ffffff</item> <item name="android:textAppearance">?android:attr/textAppearanceMedium</item> </style>
colorButtonNormal
kann im Themenstil eingestellt werden. Um diebuttonStyle
Textfarbe , -größe oder eine andere Funktion der Schaltfläche zu ändern, können Sie einen Stil erstellen und dann (weniger als v21) oderandroid:buttonStyle
(v21 +) im Themenstil verwenden, um den Schaltflächenstil festzulegen.quelle
v21 / styles.xml
<style name="AppTheme.BlueButton" parent="Widget.AppCompat.Button.Colored"> <item name="android:colorButtonNormal">@color/blue</item> <item name="android:textColor">@color/text_white</item> </style>
styles.xml
<style name="AppTheme.BlueButton" parent="Widget.AppCompat.Button.Colored"> <item name="colorButtonNormal">@color/blue_tint</item> <item name="android:textColor">@color/text_white</item> </style>
Anfangs bin ich auch mit diesem Problem konfrontiert. Nach der Korrektur wie oben habe ich die richtige UI-Schaltfläche erhalten
quelle
android:buttonStyle
stellst auch ein oder wie stellst du den Stlyle auf den Knopf?android:buttonStyle
aber dankeEs scheint ein Fehler im Android-Framework zu sein, den wir nicht
colorButtonNormal
mit demWidget.AppCompat.Button
Thema anpassen können .Eine Problemumgehungslösung besteht darin, ein anderes benutzerdefiniertes
AppCompat
Thema zu definieren undcolorAccent
zum Festlegen zu verwendencolorButtonNormal
.Es gibt zwei folgende Schritte.
1. Definieren Sie ein anderes Thema für Ihre benutzerdefinierte Schaltfläche.
<resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> <!-- Custom button theme. --> <style name="CustomButtonTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Set your desired button color here. --> <item name="colorAccent">@color/red</item> <item name="buttonStyle">@style/Widget.AppCompat.Button.Colored</item> </style> </resources>
2.Wenden Sie das Schaltflächenthema im Layout an.
<Button android:theme="@style/CustomButtonTheme"/>
quelle
Für den Fall , fragt man sich, warum
colorButtonNormal
nicht abgeholt wird als für Behinderte Tasten definiert, können Sie auch festlegen müssen ,android:disabledAlpha
um1.0
in Ihrem Thema, sonst wird Ihre Farbe wird durch Standard Mischung in den Hintergrund der Schaltfläche. Beispiel:<style name="MyButtonTheme" parent="ThemeOverlay.AppCompat.Light"> <item name="android:disabledAlpha">1.0</item> <item name="colorButtonNormal">@color/my_solid_disabled_color</item> <item name="colorAccent">@color/my_solid_accent_color</item> <item name="buttonStyle">@style/my_button_style</item> </style>
quelle
Versuchen Sie buttonStyle anstelle von android: buttonStyle, da dies das AppCompat-Attribut vor Lollipop ist und es daher ohne Android-Präfix sein sollte
quelle
Hallo, ich denke, das übergeordnete Widget, das Sie verwendet haben, ist möglicherweise nicht korrekt.
android:Widget.Button
Für API-Version 21 oder eine frühere Version sollte es für spätere Version 21 oder höher `android: Widget.Material.Button verwenden. Angenommen, Sie haben einen Standardstil (siehe unten).res/values/styles.xml <resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:buttonStyle">@style/AppTheme.Button</item> </style> <style name="AppTheme.Button" parent="android:Widget.Button"> <item name="android:background">@color/my_color</item> <item name="android:textColor">@android:color/white</item> </style> </resources>
Für API-Version 21 sollte die Ressourcenstildatei wie folgt aussehen (res / values-v21 / style.xml).
<resources> <style name="AppTheme.Button" parent="android:Widget.Material.Button"> <item name="android:background">@color/my_color</item> <item name="android:textColor">@android:color/white</item> </style> </resources>
Vielen Dank Lassen Sie mich wissen, wenn Sie Fragen haben.
quelle
Base.Widget.AppCompat.Button
tu das nicht für mich (der Material / Compat Check)?