我的style.xml中有一些小的自定义:
<style name="AppBaseTheme" parent="android:Theme.Holo.Light.NoActionBar"></style>
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<item name="android:background">@color/light_grey</item>
<item name="android:textColor">@color/white</item>
</style>
现在样式已正确应用于我的活动。
但是,当我创建一个alertdialog时,背景颜色会应用于对话框的标题和正文,这是我不想要的。我希望alertdialog保持其库存样式。
这是警报对话框:
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Wtitle").setMessage("message");
builder.setNeutralButton("ok", null);
builder.show();
有人能帮忙吗?
有一个有效的解决方案-使用另一个具有文档中所述主题的AlertDialog.Builder
构造函数,这个想法基本上来自于"如何更改AlertDialog的主题":
-
在styles.xml中有一件奇怪的事情:应用程序主题定义了
android:background
而不是android:windowBackground
。似乎并没有理由这么做,因为如果您需要所有视图的相同背景(我怀疑这是可能的),那么您可以为视图提供一些基本主题。我认为,干扰应用程序主题和视图主题基本上不是一个好主意,因为应用程序需要完全不同的属性。所以,让我们做如下:<resources> <style name="AppBaseTheme" parent="android:Theme.Holo.Light.NoActionBar"></style> <!-- Application theme. --> <style name="AppTheme" parent="AppBaseTheme"> <item name="android:windowBackground">@color/light_grey</item> <item name="android:textColor">@color/white</item> </style> </resources>
-
对话框生成器应该创建有自己的主题:
AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(this, android.R.style.Theme_Dialog));
这里请注意,由于某些原因,构造函数AlertDialog.Builder(Context Context,int theme)做得不对,
ContextThemeWrapper
是必要的(似乎是因为并非所有属性都在主题中,主题只能使用ContextThemeWrapper"重新创建")。