自定义活动主题,默认对话框主题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义活动主题,默认对话框主题相关的知识,希望对你有一定的参考价值。

我正在尝试使用默认的AppCompat主题显示AlertDialog,同时主要活动是具有自定义主题。我的问题是显示的AlertDialog似乎继承了一些父活动样式(特别是重音颜色,还有edittext颜色)。

这是我的活动主题:

<style name="Theme.MainMenu.MyTheme" parent="Theme.AppCompat">
    <item name="android:windowBackground">@drawable/background</item>
    <item name="colorPrimary">@color/myPrimary</item>
    <item name="colorPrimaryDark">@color/myPrimary_dark</item>
    <item name="colorAccent">@color/myAccent</item>
</style>

这是我创建AlertDialog(包含EditText)的方法

AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.Theme_AppCompat_Light_Dialog_Alert);

如果我没有为我的活动指定任何主题,AlertDialog将按预期显示:As expected

但如果我将MyTheme应用于我的活动,则AlertDialog看起来像:Inherited colorAccent and EditText color

尽管我给了Builder的Theme_AppCompat_Light_Dialog_Alert主题。强调颜色(此处为红色)和EditText颜色似乎是从活动主题继承的。

为什么会有这种继承,以及如何避免它,或者,是否有任何解决方案强制AlertDialog使用“完整”默认主题?

非常感谢

编辑1:

正如MinnuKaAnae所建议的,我可以为DialogAlert创建一个基于Theme.AppCompat.Light.Dialog.Alert的自定义样式,覆盖所需的属性,但我需要指向AppCompat的默认颜色:

<style name="AppCompatAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="colorAccent">@color/NEED_APPCOMPAT_DEFAULT_COLOR_ACCENT_HERE</item>
    <item name="android:textColorPrimary">@color/NEED_APPCOMPAT_DEFAULT_PRIMARY_COLOR_HERE</item>
    <item name="android:background">@color/NEED_APPCOMPAT_DEFAULT_BACKGROUND_COLOR_HERE</item>
</style>

在我的情况下,我还需要将EditText文本颜色覆盖为Light版本(黑色文本),因为Activity不是基于Light主题:属性android:editTextColor似乎没有完成这项工作。

答案

加上这个

<style name="AppCompatAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="colorAccent">#006A4E</item>
    <item name="android:textColorPrimary">#3f3f3f</item>
    <item name="android:background">#ffffff</item>
</style>

更改

AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.AppCompatAlertDialogStyle);
另一答案

如果您希望AlertDialog具有与您的Activity正在使用的主题不同的主题,请尝试使用上下文主题包装器:

ContextThemeWrapper wrapper = new ContextThemeWrapper(this, R.style.CustomStyle);
AlertDialog.Builder builder = new AlertDialog.Builder(wrapper);

以上是关于自定义活动主题,默认对话框主题的主要内容,如果未能解决你的问题,请参考以下文章

黑暗活动对话框主题不起作用

活动中自定义对话框内的 ANDROID 片段

3.1 活动应用样式与主题

Android项目实战:Dialog主题Activity实现自定义对话框效果

java 自定义活动主题和动作条样式

如何让wordpress了解我的自定义主题不是儿童主题?