Android 使用AppCompat-v7 22进行对话框蒙皮会在api上产生难看的阴影<;21

Android 使用AppCompat-v7 22进行对话框蒙皮会在api上产生难看的阴影<;21,android,android-support-library,material-design,android-appcompat,Android,Android Support Library,Material Design,Android Appcompat,我正在使用AppCompat编写一个材料设计风格的应用程序。由于AppCompat不影响对话框,因此我将对话框蒙皮为: styles.xml: <style name="MyAlertDialogTheme"> <item name="android:windowIsFloating">true</item> <item name="android:windowBackground">@android:color/transpare

我正在使用AppCompat编写一个材料设计风格的应用程序。由于AppCompat不影响对话框,因此我将对话框蒙皮为:

styles.xml:

<style name="MyAlertDialogTheme">
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</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>
    <item name="android:background">@color/theme_alert_dialog_background</item>
    <item name="colorAccent">@color/theme_accent_1</item>
</style>

<style name="AlertDialog">
    <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>

@颜色/绿色
@颜色/绿色/较深
@颜色/口音
@样式/警报对话框
@样式/警报对话框
@颜色/绿色
@颜色/绿色/较深
@颜色/口音

我在android api>=21上得到了我想要的东西,但在其他设备上,我的对话框周围有一个“盒子”

有没有办法摆脱对话框周围的“框”,甚至在api<21上应用颜色和材质主题,最好不要附加任何依赖项

Api<21上的应用程序:

API上的应用>=21:


=21“>

您可以下载修订版22.1.0(几天前更新)并与新的
AppCompat v22.1
一起使用

只需使用这样的代码(当然,在您的情况下,您必须使用自定义布局才能获得进度条)

并使用如下样式:

<style name="AppCompatAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
        <item name="colorAccent">#FFCC00</item>
        <item name="android:textColorPrimary">#FFFFFF</item>
        <item name="android:background">#5fa3d0</item>
    </style>

#FFCC00
#FFFFFF
#5fa3d0

当我对所有AlertDialog使用android.support.v7.app.AlertDialog时,我对新的AppCompat 22库有完全相同的问题,但额外的背景层只影响ProgressDialog

我所有的AlertDialog在使用我的自定义主题设置样式时看起来都很棒,但是ProgressDialog在背景上有一个奇怪的覆盖层,如OP中所述

我的一个选择是每次构建ProgressBar时都设置一个特定的样式,但我正在寻找一个应用程序范围的解决方案

借助这两个链接:

我能够去掉<21个ProgressDialogs上的额外图层

我发现的问题是,在所有版本上,ProgressBar都会根据“android:alertDialogStyle”中默认定义的内容绘制背景

因此,为了摆脱额外的层,我必须定义自己的样式并将其设置为“android:alertDialogStyle”。这样做的同时,我也覆盖了应用于ProgressDialogs的默认布局

以下是my themes.xml:

<item name="android:alertDialogTheme">@style/MyAlertDialogTheme</item>
<item name="alertDialogTheme">@style/MyAlertDialogTheme</item>
<item name="android:alertDialogStyle">@style/MyAlertDialogStyles</item>
@style/MyAlertDialogTheme
@样式/MyAlertDialogTheme
@样式/MyAlertDialogStyles
和my styles.xml:

<style name="MyAlertDialogTheme">
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</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>
    <item name="android:background">@color/theme_alert_dialog_background</item>
    <item name="colorAccent">@color/theme_accent_1</item>
</style>

<style name="AlertDialog">
    <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>

真的
@android:彩色/透明
@空的
@android:style/Animation.Dialog
@android:dimen/dialog\u min\u width\u major
@android:dimen/dialog\u min\u width\u minor
@颜色/主题\u警报\u对话框\u背景
@颜色/主题\u重音\u 1
@android:彩色/透明
@android:彩色/透明
@android:彩色/透明
@android:彩色/透明
@android:彩色/透明
@android:彩色/透明
@android:彩色/透明
@android:彩色/透明
@android:彩色/透明
@android:彩色/透明

如果有人仍在寻找简单有效的解决方案,只需将此行添加到“alertDialog”样式中即可:

@android:color/transparent

另外,更改此属性也会影响PreferenceFragment在API>=21上的对话框,因此请确保您使用的是不同的样式:对于API<21,使用透明bg;对于API>=21,不进行任何更改。ProgressDialog-请尝试下面的android 5

dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);


对于蒙皮警报对话框,您需要使用
android:Theme.DeviceDefault.Dialog.alert
(始终为本机外观)主题。否则背景将被复制。在API 21上,您看不到任何差异,但我怀疑会出现透支。对于作为对话框的蒙皮活动,请使用
android:Theme.DeviceDefault.Dialog
(本机外观)或
Theme.AppCompat.Dialog
(材质外观)主题。
android:Theme.DeviceDefault.Dialog
仅在API>14上可用。我在API 11上使用什么?此外,这也超出了非棒棒糖API的界限。老实说,没有人在乎API 11,实际上没有API 11的设备在实际使用中。你最好让你的minSdk=14。是的,我上面说的。Text ap您在这些对话框中使用的Pearance不能继承或是
TextAppearance.AppCompat.
。定义自定义文本外观样式并使用这些样式。继承
@android:TextAppearance
并根据材质设计规范(文本类型正文1)自定义
textColor
textSize
你会没事的。你知道我们怎样才能只更改正片按钮TextColor和BackgroundColor吗?@Neige使用
builder.getButton(DialogInterface.Button_正片)。setTextColor(Color.parseColor(“#FF0000”);
或…在
builder.show()之后使用相同的方法;
。对于ProgressDialog?这是正确的答案。创建一个主题,扩展其中一个app compat主题,并覆盖上面提到的窗口背景。在ProgressDialog的构建中应用主题,不再使用奇怪的背景。这对我来说很有效。我必须创建两个文件夹(值,值-21)。我在文件夹values\styles.xml中实现了该解决方案。最后,我摆脱了奇怪的边框。完美。极好的解决方案。为了澄清问题,请使用标题为“AlertDialog”的样式“作为
android:alertDialogStyle
,并将其放入默认的
style.xml
。实际上,我不需要在v21
style.xml
中创建其他样式。
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
dialog.getWindow().clearFlags(LayoutParams.FLAG_DIM_BEHIND);