android - 如何定义新主题并覆盖框架中的警报对话框样式

标签 android android-alertdialog android-theme android-styles

我想在我的应用程序中定义一个新主题,并覆盖默认的 Holo AlertDialog 样式。但是我无法更改对话框的背景或布局。 我部分遵循了 this blog post 的建议.

这些是主题:

<style name="CD1.Theme" parent="android:style/Theme.Holo">
    <!-- AlertDialog attributes -->
    <item name="android:alertDialogTheme">@style/CD1.Theme.Dialog.Alert</item>
    <item name="android:alertDialogStyle">@style/CD1.AlertDialog</item>
    <item name="android:alertDialogCenterButtons">false</item>
    <item name="android:alertDialogIcon">@drawable/cd1_ic_dialog_alert_holo</item>
</style>
<style name="CD1.Theme.Dialog.Alert" parent="android:style/Theme.Holo.Dialog.Alert">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowTitleStyle">@style/CD1.DialogWindowTitle</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
    <item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item>
    <item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item>
</style>

这些是样式:

<style name="CD1.AlertDialog" parent="android:style/AlertDialog.Holo">
    <item name="android:fullDark">@drawable/cd1_dialog_full_holo</item>
    <item name="android:topDark">@drawable/cd1_dialog_top_holo</item>
    <item name="android:centerDark">@drawable/cd1_dialog_middle_holo</item>
    <item name="android:bottomDark">@drawable/cd1_dialog_bottom_holo</item>
    <item name="android:fullBright">@drawable/cd1_dialog_full_holo</item>
    <item name="android:topBright">@drawable/cd1_dialog_top_holo</item>
    <item name="android:centerBright">@drawable/cd1_dialog_middle_holo</item>
    <item name="android:bottomBright">@drawable/cd1_dialog_bottom_holo</item>
    <item name="android:bottomMedium">@drawable/cd1_dialog_bottom_holo</item>
    <item name="android:centerMedium">@drawable/cd1_dialog_middle_holo</item>
    <item name="android:layout">@layout/cd1_alert_dialog</item>
</style>
<style name="CD1.DialogWindowTitle" parent="android:style/DialogWindowTitle.Holo">
    <item name="android:maxLines">1</item>
    <item name="android:scrollHorizontally">true</item>
    <item name="android:textAppearance">@android:style/TextAppearance.Holo.DialogWindowTitle</item>
    <item name="android:gravity">center</item>
</style>

这是行不通的。仍显示默认的全息布局。我应该怎么办? 谢谢。

最佳答案

移动<item name="android:alertDialogStyle">@style/CD1.AlertDialog</item>来自 CD1.ThemeCD1.Theme.Dialog.Alert :

<style name="CD1.Theme" parent="android:style/Theme.Holo">
    <!-- AlertDialog attributes -->
    <item name="android:alertDialogTheme">@style/CD1.Theme.Dialog.Alert</item>
    <item name="android:alertDialogCenterButtons">false</item>
    <item name="android:alertDialogIcon">@drawable/cd1_ic_dialog_alert_holo</item>
</style>

<style name="CD1.Theme.Dialog.Alert" parent="android:style/Theme.Holo.Dialog.Alert">
    <item name="android:alertDialogStyle">@style/CD1.AlertDialog</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowTitleStyle">@style/CD1.DialogWindowTitle</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
    <item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item>
    <item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item>
</style>

顺便说一句:

android:layout属性需要 API 11

如果您正在针对低于 11 的 SDK 进行开发,您可以考虑这个项目:
https://github.com/fengdai/AlertDialogPro

关于android - 如何定义新主题并覆盖框架中的警报对话框样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22315640/

相关文章:

Android:在自定义 View 组中将 onTouchEvent 与自定义 View 一起使用

android - 2D Sprite 的 OpenGL ES 投影

java - 在另一个类中调用 AlertDialog

android:windowTranslucentStatus/fitsSystemWindows 工具栏大小错误

java - Android ListView 与 SimpleAdapter 泄漏内存

android - 在运行时更改 EditText 中的文本样式格式

android - 在 alertDialog 中使用微调器时出现空指针异常

android - 如何在 Android 上显示警报对话框?

android - 以编程方式切换应用程序范围的主题?

android - 扩展外部应用程序样式/主题