我正在尝试使用默认的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 的建议,我可以基于 Theme.AppCompat.Light.Dialog.Alert 为DialogAlert创建自定义样式,覆盖所需的属性,但是我需要指向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 doen'似乎做了这件事。
答案 0 :(得分: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);
答案 1 :(得分:0)
如果您希望AlertDialog具有与Activity使用的主题不同的主题,请尝试使用上下文主题包装器:
ContextThemeWrapper wrapper = new ContextThemeWrapper(this, R.style.CustomStyle);
AlertDialog.Builder builder = new AlertDialog.Builder(wrapper);