我有<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>
:
values-v21:styles.xml
和<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>
:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:buttonStyle">@style/AppTheme.Button</item>
</style>
和
的app风格@color/my_color
但颜色显示为灰色而不是{{1}}
答案 0 :(得分:55)
要自定义一个按钮,只需设置android:theme =&#34; @ style / AppTheme.Button&#34;到你的按钮。
<Button
android:theme="@style/AppTheme.Button"
/>
像在问题中一样定义你的风格
<style name="AppTheme.Button" parent="Base.Widget.AppCompat.Button">
<item name="colorButtonNormal">@color/my_color</item>
</style>
[编辑]
请参阅GitHub演示here
答案 1 :(得分:45)
使用Widget.AppCompat.Button.Colored
作为您的样式的父级。
<style name="RedButton" parent="Widget.AppCompat.Button.Colored">
<item name="android:textColor">@color/white</item>
<item name="colorButtonNormal">@color/red</item>
</style>
在按钮定义中使用android:theme
,而不是style
:
<Button android:theme="@style/RedButton"/>
请参阅AppCompat v21 > Theming和Android Support Library v22.1 - AppCompat博文。
(关于第二篇文章的注释,API11支持android:theme
,它只是没有从父进行自动继承,你必须在每个孩子上指定它,这里不是问题,但值得一提 - 请参阅{ {3}}发布信息)。
答案 2 :(得分:14)
将xml行放在你的&#34; AppTheme&#34; xml,而不是试图从&#34; AppTheme.Button&#34;设置它。对于我来说,这适用于v22.1.1与非棒棒糖设备。我猜这是一个错误,因为你的解决方案适用于棒棒糖。
<item name="colorButtonNormal">@color/my_color</item>
答案 3 :(得分:13)
使用:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="buttonStyle">@style/AppTheme.Button</item>
</style>
删除android:
答案 4 :(得分:13)
确保Activity
正在扩展AppCompatActivity
,否则将无法正确处理appCompat样式。
android.support.v7.app.AppCompatActivity
compile 'com.android.support:appcompat-v7:23.0.1'
答案 5 :(得分:9)
有效:
<!-- 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
。要更改按钮的文本颜色,大小或任何其他功能,您可以创建样式,然后在主题样式中使用buttonStyle
(小于v21)或android:buttonStyle
(v21 +)来设置按钮风格。
答案 6 :(得分:3)
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>
最初我也面临这个问题。如上所述进行校正后,我得到了正确的UI按钮
答案 7 :(得分:1)
如果您想知道为什么colorButtonNormal
未按照已停用按钮的定义而被选中,您可能还需要在主题中将android:disabledAlpha
设置为1.0
,否则您的颜色将默认为融入按钮的背景。例如:
<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>
答案 8 :(得分:1)
似乎是Android框架上的错误,我们无法更改主题为colorButtonNormal
的自定义Widget.AppCompat.Button
。
一种解决方法是定义另一个自定义AppCompat
主题,并使用colorAccent
设置colorButtonNormal
。
有以下两个步骤。
1.为您的自定义按钮定义另一个主题。
<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。在布局中应用按钮主题。
<Button android:theme="@style/CustomButtonTheme"/>
答案 9 :(得分:0)
您好我认为您使用的父窗口小部件可能不正确,对于API版本21或更早版本应该android:Widget.Button
,对于更高版本21或更高版本,您应该使用`android:Widget.Material.Button。假设您有默认样式,请看下面的内容。
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>
对于API版本21,资源样式文件应如下(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>
谢谢。如果您有任何疑问,请告诉我。
答案 10 :(得分:0)
尝试使用buttonStyle代替android:buttonStyle,因为这是AppLat属性pre Lollipop,所以应该没有android前缀