我需要更改应用程序中每个对话框的样式。我的理解是,在阅读了样式和主题文档(实际上相当差)之后,我想出了这个片段:
styles.xml
<resources>
<style name="RMTheme" parent="@android:style/Theme">
<item name="android:dialogLayout">@style/CustomDialog</item>
</style>
<style name="CustomDialog" parent="@android:style/Theme.Dialog">
<item name="android:windowBackground">@color/transparent_color</item>
<item name="android:textColorPrimary">@android:color/black</item>
</style>
</resources>
如果应用得当,应该创建具有透明背景和黑色文本的每个对话框。
这是我应用主题的地方。
的AndroidManifest.xml
<application
android:theme="@style/RMTheme"
android:debuggable="true"
android:label="@string/app_name"
android:icon="@drawable/icon">
我猜测问题在于我正在尝试将自己的命名空间Theme.Dialog
应用于android命名空间的Theme.Dialog
。基本上,我认为从代码中可以清楚地看到,我只是想在android的默认对话框样式中添加/覆盖一些属性。
编辑:还要注意我不想(实际上不能,因为我正在编译API级别9)使用Dialog(Context context, int style)
构造函数。我希望全局应用主题而不会明确地将主题id传递给每个对话框构造函数,而且,无论如何,我无法在此API级别使用它。
编辑:Woops ...显然Dialog(Context context, int style)
在此API级别可用。我想到的是AlertDialog(Context context, int style)
。尽管如此,我仍然希望将这个主题全局应用于所有对话框,而不是必须使用该构造函数。
答案 0 :(得分:2)
android:dialogLayout
,则 API 8 中 themes.xml
不存在。您可以在“Android SDK文件夹”/ platforms / android-8 / data / res / values
这是style/Theme
中唯一与Dialog
相关的API级别的属性。
<!-- Dialog attributes -->
<item name="alertDialogStyle">@android:style/AlertDialog</item>
然后引用这个:
<style name="AlertDialog">
<item name="fullDark">@android:drawable/popup_full_dark</item>
<item name="topDark">@android:drawable/popup_top_dark</item>
<item name="centerDark">@android:drawable/popup_center_dark</item>
<item name="bottomDark">@android:drawable/popup_bottom_dark</item>
<item name="fullBright">@android:drawable/popup_full_bright</item>
<item name="topBright">@android:drawable/popup_top_bright</item>
<item name="centerBright">@android:drawable/popup_center_bright</item>
<item name="bottomBright">@android:drawable/popup_bottom_bright</item>
<item name="bottomMedium">@android:drawable/popup_bottom_medium</item>
<item name="centerMedium">@android:drawable/popup_center_medium</item>
</style>
这些是不同的9个补丁绘图,操作系统根据您的主题选择它,Froyo提供了一些诸如Theme.Black
和Theme.Light
。
对于API级别8,就是这样!您似乎唯一能够通过XML更改的是与对话框背景相关的图像。较新的操作系统版本允许您覆盖alertDialogTheme
属性,从而通过XML为您提供更多控制。
我做了一个非常简单的AlertDialog
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("TESTING 123");
builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
builder.setNegativeButton("NO", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
AlertDialog dialog = builder.create();
dialog.show();
这就是它在Gingerbread设备上的外观(懒得创建一个Froyo模拟器......)
现在我们通过XML覆盖警告对话框样式。
<style name="AppBaseTheme" parent="android:style/Theme">
</style>
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<item name="android:alertDialogStyle">@style/NewAlertDialog</item>
</style>
<style name="NewAlertDialog">
<item name="android:fullDark">@android:color/transparent</item>
<item name="android:topDark">@android:color/transparent</item>
<item name="android:centerDark">@android:color/transparent</item>
<item name="android:bottomDark">@android:color/transparent</item>
<item name="android:fullBright">@android:color/transparent</item>
<item name="android:topBright">@android:color/transparent</item>
<item name="android:centerBright">@android:color/transparent</item>
<item name="android:bottomBright">@android:color/transparent</item>
<item name="android:bottomMedium">@android:color/transparent</item>
<item name="android:centerMedium">@android:color/transparent</item>
</style>
我们将主题添加到清单文件中的application
标记。
现在Dialog看起来像这样: 机器人:主题= “@风格/ AppTheme”
答案 1 :(得分:0)
另一个诀窍是:
而不是
new Dialog(getApplicationContext(), ...)
待办事项
new Dialog(MyActivity.this, ...)