Android会覆盖除对话框之外的所有按钮样式

时间:2016-10-22 15:26:07

标签: android android-styles android-7.0-nougat

我一直在覆盖我的应用中的默认按钮样式:

<style name="ButtonStyle" parent="Base.Widget.AppCompat.Button">
        <item name="android:textAllCaps">false</item>
        <item name="android:textSize">18sp</item>
        <item name="android:textColor">@color/primaryTextContrast</item>
        <item name="android:background">@drawable/button</item>
    </style>

在Nougat之前工作正常,但是对于Nougat来说,有一个变化(我认为是一个错误修复),这样的风格也适用于对话框中的按钮,而在以前的版本中它没有。这具有在白色背景上给对话框按钮白色文本的效果。

如果相关,则buttondrawable中的9补丁,并在drawable-v21中被覆盖:

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?attr/colorControlHighlight">
    <item android:drawable="?attr/colorPrimary"/>
</ripple>

原色为暗色,primaryTextContrast为白色。由于某些原因,对话框不会在牛轧糖中出现黑色按钮 - 它们似乎拾取文本颜色而不是背景。因此,我需要让对话框按钮执行默认操作,或者使按钮完全继承具有深色背景和白色文本的样式。

1 个答案:

答案 0 :(得分:3)

@nasch,对话框按钮使用按钮栏样式。在这种情况下,您可以执行类似

的操作
<style name="buttonBarButtonStyle" parent="Widget.AppCompat.Button.ButtonBar.AlertDialog">
    <item name="android:textColor">@color/colorPrimary</item>
</style>

在主要样式定义中,然后定义

<style name="MyCustomTheme" parent="Theme.AppCompat">
  <item name="buttonBarButtonStyle">@style/buttonBarButtonStyle</item>
 ...

希望这有帮助。