无法将 colorButtonNormal 值更改为所有按钮
Posted
技术标签:
【中文标题】无法将 colorButtonNormal 值更改为所有按钮【英文标题】:Cant change colorButtonNormal value to all buttons 【发布时间】:2016-01-23 03:34:06 【问题描述】:我正在尝试以我的风格使用colorButtonNormal
使我的应用程序中的所有按钮都具有默认颜色。
它在 API 21 及更高版本上运行良好,但在 API 21 下它只会改变一些按钮的背景,我不知道出了什么问题。
styles.xml
<resources xmlns:tools="http://schemas.android.com/tools">
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowContentOverlay">@null</item>
<item name="android:textColorPrimary">@color/white</item>
<item name="colorPrimary">@color/btn_login</item>
<item name="colorPrimaryDark">@color/bg_login</item>
<item name="colorAccent">@color/btn_login</item>
<item name="colorButtonNormal">@color/btn_login</item>
</style>
</resources>
v21/styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowContentOverlay">@null</item>
<item name="android:textColorPrimary">@color/white</item>
<item name="android:alertDialogTheme">@style/AlertDialogCustom</item>
<item name="android:colorButtonNormal">@color/btn_login</item>
<item name="colorPrimary">@color/btn_login</item>
<item name="colorPrimaryDark">@color/bg_login</item>
<item name="colorAccent">@color/btn_login</item>
</style>
<style name="AlertDialogCustom" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="android:colorPrimary">@color/btn_login</item>
<item name="android:colorAccent">@color/btn_login</item>
<item name="colorAccent">@color/btn_login</item>
<item name="colorPrimary">@color/btn_login</item>
<item name="colorPrimaryDark">@color/bg_login</item>
</style>
<style name="Preference" parent="Theme.AppCompat.Light">
<item name="android:textColorPrimary">@color/black</item>
<item name="android:colorPrimary">@color/btn_login</item>
<item name="android:colorAccent">@color/btn_login</item>
<item name="android:editTextColor">@color/black</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:alertDialogTheme">@style/AlertDialogCustom</item>
<item name="colorAccent">@color/btn_login</item>
</style>
<style name="EditTextThemeCustom" parent="Theme.AppCompat.Light">
<!-- Customize your theme here. -->
<item name="android:editTextColor">@color/black</item>
<item name="android:textColor">@color/black</item>
<item name="colorAccent">@color/btn_login</item>
</style>
</resources>
结果:
Lollipop
和
Kitkat
有什么建议吗?
【问题讨论】:
Response 我的代码与接受的答案相同...你能详细说明一下吗? 【参考方案1】:添加到您的styles.xml
<style name="ColoredButton" parent="Widget.AppCompat.Button">
<item name="colorButtonNormal">@color/btn_login</item>
</style>
然后使用
android:theme="@style/ColoredButton"
作为按钮的属性之一
【讨论】:
这对我不起作用,但是如果我向 ColoredButton 添加其他属性,它们确实起作用(即文本颜色)Widget.AppCopmat.Button
是 style 而不是 theme。像<style name="ColoredButton" parent="">
这样的主题覆盖会产生预期的效果,而不会产生任何不可预知的副作用。【参考方案2】:
您充气的按钮将自动翻译为AppCompatButton
。
无论您在哪里使用 new Button(context)
,都需要使用 new AppCompatButton(context)
来代替 Material 主题颜色。
【讨论】:
没关系,我修好了。我有 style="?android:attr/buttonSizeSmall" 类似的东西,所以当我删除它时,一切都修复了 对于 appcompat 主题,您将使用?buttonStyleSmall
而不是 ?android:buttonStyleSmall
。请将其作为解决方案发布或删除问题。【参考方案3】:
我在旧设备中遇到了这个问题(
【讨论】:
以上是关于无法将 colorButtonNormal 值更改为所有按钮的主要内容,如果未能解决你的问题,请参考以下文章
无法更改页面中的对象值,但在控制台日志中显示为工作(angularjs)