无法将 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.Buttonstyle 而不是 theme。像&lt;style name="ColoredButton" parent=""&gt; 这样的主题覆盖会产生预期的效果,而不会产生任何不可预知的副作用。【参考方案2】:

您充气的按钮将自动翻译为AppCompatButton

无论您在哪里使用 new Button(context),都需要使用 new AppCompatButton(context) 来代替 Material 主题颜色。

【讨论】:

没关系,我修好了。我有 style="?android:attr/buttonSizeSmall" 类似的东西,所以当我删除它时,一切都修复了 对于 appcompat 主题,您将使用 ?buttonStyleSmall 而不是 ?android:buttonStyleSmall。请将其作为解决方案发布或删除问题。【参考方案3】:

我在旧设备中遇到了这个问题(

【讨论】:

以上是关于无法将 colorButtonNormal 值更改为所有按钮的主要内容,如果未能解决你的问题,请参考以下文章

无法将绑定控制更改推送到数据集

无法更改 Javascript 中数字输入的默认值

无法更改页面中的对象值,但在控制台日志中显示为工作(angularjs)

我无法更改 Cordova JAVA_HOME 值

PHP - 无法将会话变量设置为类staticdefault值

无法更改按钮 iOS 的标题