Widget.AppCompat.Button colorButtonNormal显示为灰色

Dan*_*ico 66 android android-appcompat

我有values:styles.xml:

<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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

和app风格搭配

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
      <item name="android:buttonStyle">@style/AppTheme.Button</item>
</style>
Run Code Online (Sandbox Code Playgroud)

但颜色显得灰色而不是 @color/my_color

Ole*_*ndr 58

要自定义一个按钮,只需将android:theme ="@ style/AppTheme.Button"设置为您的按钮.

<Button
    android:theme="@style/AppTheme.Button"
    />
Run Code Online (Sandbox Code Playgroud)

像在问题中一样定义你的风格

<style name="AppTheme.Button" parent="Base.Widget.AppCompat.Button">
    <item name="colorButtonNormal">@color/my_color</item>
</style>
Run Code Online (Sandbox Code Playgroud)

[编辑]

在此处查看GitHub演示

  • 我正在做style = ..而不是android:theme = ...谢谢! (6认同)

小智 48

使用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>
Run Code Online (Sandbox Code Playgroud)

使用android:theme,而不是style按钮定义:

<Button android:theme="@style/RedButton"/>
Run Code Online (Sandbox Code Playgroud)

请参阅AppCompat v21>主题Android支持库v22.1 - AppCompat博客文章.(注意第二篇文章,android:themeAPI11支持,它只是不从父母那里做自动继承,你必须在每个孩子上指定它,这里不是问题但值得一提 - 请参阅Chris Banes的帖子).

  • @valentin +1 for android:theme (11认同)

tyl*_*ach 14

将xml行放在"AppTheme"xml中,而不是尝试从"AppTheme.Button"设置它.对于我来说,这适用于v22.1.1与非棒棒糖设备.我猜这是一个错误,因为你的解决方案适用于棒棒糖.

<item name="colorButtonNormal">@color/my_color</item>
Run Code Online (Sandbox Code Playgroud)


Joh*_*ohn 14

确保您Activity正在扩展AppCompatActivity,否则它将无法正确处理appCompat样式.

  • 类: android.support.v7.app.AppCompatActivity
  • 摇篮: compile 'com.android.support:appcompat-v7:23.0.1'


Dou*_*aro 13

使用:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
  <item name="buttonStyle">@style/AppTheme.Button</item>
</style>
Run Code Online (Sandbox Code Playgroud)

除掉 android:


Ana*_*mez 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>
Run Code Online (Sandbox Code Playgroud)

colorButtonNormal可以在主题样式中设置.要更改按钮的文本颜色,大小或任何其他功能,您可以创建样式,然后在主题样式中使用buttonStyle(小于v21)或android:buttonStyle(v21 +)来设置按钮样式.


Bha*_*gar 1

您好,我认为您使用的父小部件可能不正确,它应该适用android:Widget.Button于 API 版本 21 或更早版本,对于更高版本 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>
Run Code Online (Sandbox Code Playgroud)

对于 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>
Run Code Online (Sandbox Code Playgroud)

谢谢 如果您有任何问题请告诉我。