自定义活动主题,默认对话框主题
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将按预期显示:
但如果我将MyTheme应用于我的活动,则AlertDialog看起来像:
尽管我给了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);
以上是关于自定义活动主题,默认对话框主题的主要内容,如果未能解决你的问题,请参考以下文章