我正在尝试为我的警报对话框设置android Theme.Light 主题,但到目前为止还没有成功。在阅读了一些教程后,我使用 AlertDialog.Builder 收集了这些教程,我们无法直接在构造函数中设置主题(至少在API级别7中)。
我找到的备用解决方案是使用 ContextThemeWrapper ,每个人都放心使用它可以解决我的问题。所以我编写了这样的代码:
AlertDialog.Builder builder = new AlertDialog.Builder(
new ContextThemeWrapper(context, R.style.popup_theme));
我在values文件夹中描述了我的主题:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="back_color">#ffffffff</color>
<style name="popup_theme" parent="@android:style/Theme.Light">
<item name="android:windowBackground">@color/back_color</item>
<item name="android:colorBackground">@color/back_color</item>
</style>
不幸的是,我仍然获得默认的 Theme.Dialog.Alert 主题。谁能告诉我为什么?我哪里错了?
修改: 如果你不知道我的问题的答案,请投票。我有一个不好的习惯,就是发布被困的问题:(
答案 0 :(得分:6)
将parent="android:Theme.Light"
更改为parent="@android:style/Theme.Light"
答案 1 :(得分:3)
我花了一段时间才弄明白。
现在的问题是Theme.Light和Theme.Holo.Light等是围绕活动设计的。对话框主题需要基于主题,例如@android:style / Theme.Dialog,其中包含特定于对话框的属性。
<style name="popup_theme" parent="@android:style/Theme.Dialog">
尝试使用以下内容覆盖Theme.Dialog:
<item name="android:textAppearance">?android:attr/textAppearanceInverse</item>
答案 2 :(得分:1)
parent="android:style/Theme.Light"
答案 3 :(得分:1)
试试这个:
<style name="popup_theme" parent="Theme.AppCompat.Light.Dialog.Alert">
答案 4 :(得分:0)
这就是我所做的。它对我有用
AlertDialog.Builder builder = new AlertDialog.Builder(context,R.style.Theme_AppCompat_Light_Dialog);