如何找出AlertDialog使用的主题?

问题描述 投票:0回答:1

我在我的应用程序中使用“Theme.MaterialComponents.Light”。当我想要某些全局元素(按钮、浮动操作按钮、卡片视图等)的自定义样式时,我在布局中打开所需元素的设计模式,我可以看到特定元素使用什么主题,然后转到主题。 MaterialComponents.Light,搜索主题,将其添加到我自己的主题(覆盖 Theme.MaterialComponents.Light),基于该主题创建我自己的主题并在应用程序主题中覆盖它。如何为 AlertDialog 全局执行此操作?我知道如果我创建它,我可以在调用 AlertDialog.Builder 时指定主题。但是,如果某些第三方库生成它并且我无法更改其调用怎么办?如何强制所有内容都使用一个自定义主题,就像我对视图所做的那样?我试图找到造成这种情况的主题,但没有成功。我覆盖了它(我将在下面附加它),但它不起作用。

//Base application theme
<style name="AppTheme" parent="Theme.MaterialComponents.Light">
    //Are they responsible for AlertDialogs or I'm wrong?
    <item name="alertDialogTheme">@style/AlertDialog</item>
    <item name="materialAlertDialogTheme">@style/AlertDialog</item>
</style>

//My custom theme, which doesn't override global AlertDialogs
<style name="AlertDialog" parent="Theme.MaterialComponents.Light.Dialog.Alert">
    <!-- Base colors -->
    <item name="android:textColorPrimary">#EEEEEE</item>
    <item name="colorControlNormal">#FFF</item>
    <item name="colorControlActivated">#FF0000</item>
    <item name="textColorAlertDialogListItem">#FFF</item>

    <!-- Button styles -->
    <item name="buttonBarPositiveButtonStyle">@style/YDialogPositiveButton</item>
    <item name="buttonBarNegativeButtonStyle">@style/YDialogNegativeButton</item>
    <item name="buttonBarNeutralButtonStyle">@style/YDialogNeutralButton</item>

    <!-- Sizes -->
    <item name="android:lineSpacingExtra">2dp</item>
    <item name="android:textSize">20sp</item>
    <item name="android:windowTitleStyle">@style/YDialogTitleTextAppearance</item>
</style>
android android-alertdialog
1个回答
0
投票

我发现您的应用程序主题中使用了警报对话框主题:

<item name="alertDialogTheme">@style/ThemeOverlay.MaterialComponents.Dialog.Alert</item>
<item name="materialAlertDialogTheme">@style/ThemeOverlay.MaterialComponents.MaterialAlertDialog</item>

您的代码引用了错误的父级,它不是

Theme.MaterialComponents.Light.Dialog.Alert
而是
ThemeOverlay.MaterialComponents.MaterialAlertDialog

要发现这一点非常简单,您检查应用程序主题并查看alertDialogTheme 的用途

© www.soinside.com 2019 - 2024. All rights reserved.