【发布时间】:2018-05-16 09:19:17
【问题描述】:
我正在尝试使用默认 AppCompat 主题显示 AlertDialog,同时主要活动具有自定义主题。我的问题是显示的 AlertDialog 似乎继承了一些父活动样式(尤其是强调色,还有编辑文本颜色)。
这是我的活动主题:
<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' t 似乎完成了这项工作。
【问题讨论】:
-
发布您的 Theme_AppCompat_Light_Dialog_Alert
-
创建一个自定义主题并放入您的 colorPrimary、colorDarkPrimary 和 coloraccent 颜色并在此对话框中使用它
-
@MinnuKaAnae : Theme_AppCompat_Light_Dialog_Alert 样式是 Android 支持库之一。
-
@ND1010_ :好的,我可以为 AlertDialog 创建一个自定义主题,但我需要使用默认的 (Theme.AppCompat.Light) colorPrimary/colorDarkPrimary 和 colorAccent。我认为可能存在更好的解决方案。
-
@Virtual 这个 Theme_AppCompat_Light_Dialog_Alert 将在您的 styles.xml 中可用。您必须覆盖 colorAccent 才能满足您的需求,请尝试以下答案。将其添加到您的 styles.xml 中。那会奏效的。
标签: android dialog styles themes