编辑:我应该提到我已经阅读了很多关于
AlertDialog
样式的答案,并尝试了我能找到的每一个建议,所以请不要使其重复。
我正在测试一个示例类。如果我使用
MaterialAlertDialogBuilder
,我的按钮颜色在 Android 14 上很好。如果我使用 AlertDialog.Builder
,那么我的颜色是错误的。我不确定我的风格配置有什么错误。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.Alertdialogtest" parent="Theme.MaterialComponents.DayNight.NoActionBar" >
<!-- Primary brand color. -->
<item name="colorPrimary">#ffaacc</item>
<item name="colorPrimaryVariant">@color/teal_700</item>
<item name="colorOnPrimary">@color/black</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/purple_200</item>
<item name="colorOnSecondary">@color/black</item>
<item name="alertDialogStyle">@style/MyAlertDialogTheme</item>
<item name="materialAlertDialogTheme">@style/MyAlertDialogTheme</item>
</style>
<style name="MyAlertDialogTheme" parent="Theme.MaterialComponents.DayNight.Dialog.Alert">
<item name="buttonBarNegativeButtonStyle">@style/alertButton</item>
<item name="buttonBarNeutralButtonStyle">@style/alertButton</item>
<item name="buttonBarPositiveButtonStyle">@style/alertButton</item>
</style>
<style name="alertButton" parent="Widget.AppCompat.Button.ButtonBar.AlertDialog">
<item name="android:textColor">#791034</item>
</style>
</resources>
此代码的按钮颜色为
colorPrimary
AlertDialog.Builder(this)
.setTitle("Title")
.setMessage("Message")
.setPositiveButton("OK") { dialog, which ->
// Respond to positive button press
}
.setNegativeButton("Cancel") { dialog, which ->
// Respond to negative button press
}
.show()
此代码具有样式为
alertButton
android:textColor
: 的颜色按钮
MaterialAlertDialogBuilder(this)
.setTitle("Title")
.setMessage("Message")
.setPositiveButton("OK") { dialog, which ->
// Respond to positive button press
}
.setNegativeButton("Cancel") { dialog, which ->
// Respond to negative button press
}
.show()
这只是一个简单的测试应用程序来重现问题,我想显示的实际对话框来自第三方库,我对他们的代码有零控制,我唯一可以改变的是
AlertDialog
的样式。那我做错了什么?
我会回答我自己的问题。
看起来像
<item name="colorAccent">@color/color_accent</item>
适用于某些应用程序,但在我的应用程序上,由于某种未知的原因,唯一有效的是
colorOnPrimary
。