Widget.AppCompat.Button colorButtonNormal显示为灰色

时间:2015-04-25 04:11:49

标签: android android-appcompat

我有<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}}

11 个答案:

答案 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 > ThemingAndroid 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样式。

  • class:android.support.v7.app.AppCompatActivity
  • Gradle: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前缀