更改appcompat alertdialog强调颜色会使所有对话框变小

时间:2015-02-14 17:49:04

标签: android alertdialog android-alertdialog android-styles

所以我想改变我的alertdialogs强调色,我把它添加到我的styles.xml

<style name="AppTheme.AlertDialogTheme" parent="Theme.AppCompat.Light.Dialog">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

这就是我的基本风格:

<item name="android:alertDialogTheme">@style/AppTheme.AlertDialogTheme</item>

颜色已经改变,很酷,但现在我的所有对话框都变小了。如何在更改颜色时保留尺寸?

Here is before/after album.

3 个答案:

答案 0 :(得分:6)

通过查看google iosched代码,alertdialog主题需要从Theme.AppCompat.Light.Dialog.Alert继承而不仅仅是Theme.AppCompat.Light.Dialog。

两个警告。一,结果比以前更宽,但至少它不像包装内容那么窄。 二,这在pre-L设备上引起了奇怪的行为。 最终,我最终用

创建了所有提醒
        AlertDialog.Builder dialog = new AlertDialog.Builder(context,
            R.style.Theme_AppCompat_Light_Dialog_Alert_Custom

这适用于Alert Dialogs和Dialogs但由于某种原因它没有主题Progress Dialogs。 我不得不从我的基本主题中删除android:alertDialogTheme并将其放在v21 / styles.xml中,以便在Pre-L设备上没有不良行为(双背景)的主题进度对话框。

答案 1 :(得分:4)

对话框有两种样式:alertDialogTheme用于警告对话框,dialogTheme用于其他对话框(例如DatePickerDialog,但也可以更具体地自定义) 。关键点在于,每个都需要不同的基本样式,因为它们具有不同的布局参数。

因此,要正确使用主题对话框,请使values-v21\styles.xml文件或多或少地像这样:

<!-- Theme -->
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
    <item name="android:dialogTheme">@style/AppThemeDialog</item>
    <item name="android:alertDialogTheme">@style/AppThemeAlertDialog</item>
</style>

<!-- Styles for dialogs in Lollipop, use accent color from applicable theme. -->
<style name="AppThemeDialog" parent="android:Theme.Material.Light.Dialog">
    <item name="android:colorAccent">?attr/colorAccent</item>
</style>
<style name="AppThemeAlertDialog" parent="android:Theme.Material.Light.Dialog.Alert">
    <item name="android:colorAccent">?attr/colorAccent</item>
</style>

这是针对 Light with Dark Action Bar 变体,虽然Light和Dark版本大致相同,只是在任何地方更改父样式。

作为一个优势,此设置将读取应用程序主题中的accentColor集,因此您无需在此重复这些设置。

答案 2 :(得分:0)

您正在使用 Theme.AppCompat.Light.Dialog 而不是AlertDialogs的正确主题: Theme.Material.Light.Dialog.Alert 。据我所知,AppCompat中没有AlertDialogs的主题,因此只能在values-v21文件夹中使用它。