gpt4 book ai didi

android - 将主题应用于 Android 应用程序中的所有对话框

转载 作者:太空狗 更新时间:2023-10-29 14:16:55 25 4
gpt4 key购买 nike

我需要更改应用程序中每个对话框的样式。我的理解是,在阅读了样式和主题文档(真的很差)之后,我想到了这个 fragment :

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 级别对我来说不可用。

编辑:糟糕...显然 Dialog(Context context, int style) 在此 API 级别可用。我想到的是 AlertDialog(Context context, int style)。尽管如此,我仍然希望将这个主题全局应用于所有对话框,而不必使用该构造函数。

最佳答案

API 级别 8 的解决方案,编辑

如果您查看 Android SDK 中包含的 themes.xml

android:dialogLayout 不存在于 API 8 中。您可以在 "Android SDK 文件夹"/platforms/android-8/data/res/values

下找到所有相关的 xml 文件

这是 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.BlackTheme.Light

对于 API 级别 8,就是这样!您似乎唯一可以通过 XML 更改的是那些与对话框背景相关的图像。较新的操作系统版本允许您覆盖 alertDialogTheme 属性,这使您可以通过 XML 进行更多控制。

API 8 背景变化

我做了一个超简单的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 模拟器...)

Before change

现在我们通过 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>

我们将主题添加到 list 文件中的application 标签中。

现在对话框看起来像这样: android:theme="@style/AppTheme"

enter image description here

关于android - 将主题应用于 Android 应用程序中的所有对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21021956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com