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

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

我正在尝试使用默认的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似乎没有完成这项工作。

android dialog styles themes
2个回答
1
投票

加上这个

<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);

0
投票

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

ContextThemeWrapper wrapper = new ContextThemeWrapper(this, R.style.CustomStyle);
AlertDialog.Builder builder = new AlertDialog.Builder(wrapper);
© www.soinside.com 2019 - 2024. All rights reserved.