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

标签 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 为白色。由于某种原因,对话框在牛轧糖中没有黑色按钮 - 它们似乎选择了文本颜色,但没有选择背景。因此,我需要要么让对话框按钮执行默认操作,要么让按钮完全继承深色背景和白色文本的样式。

最佳答案

@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>
 ...

希望这有帮助。

关于Android 覆盖除对话框之外的所有按钮样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40193818/

相关文章:

android - 我的 Android Studio 项目出现以下错误

android - 如何为多窗口模式配置应用程序?

android - 将多个 Admob 广告预加载到数组中?

Android list 文件未获取默认启动 Activity

android - colorControlNormal 不适用于 MaterialToolbar 的图标

android - Android Nougat 升级中的 Recyclerview 问题

android - 日期选择器对话框无法切换到 Android 7.0 设备上的微调器

android - 包 R 不存在……或者它存在吗?

android - 如何初始化 React Native 项目

android - 无法在布局中对齐 TextView 和 Checkbox