使用AppCompat-v7 22进行对话剥皮会导致api <21上的丑陋阴影

我正在使用AppCompat编写一个材料devise样式的应用程序。 由于AppCompat不会影响对话框,所以我正在为对话框蒙上一层阴影:

styles.xml:

<style name="AppTheme.Base" parent="Theme.AppCompat"> <!-- Set AppCompat's color theming attrs --> <item name="colorPrimary">@color/green</item> <item name="colorPrimaryDark">@color/green_darker</item> <item name="colorAccent">@color/accent</item> <item name="android:alertDialogTheme">@style/alertDialog</item> <item name="android:dialogTheme">@style/alertDialog</item> </style> <style name="alertDialog" parent="Theme.AppCompat.Dialog"> <item name="colorPrimary">@color/green</item> <item name="colorPrimaryDark">@color/green_darker</item> <item name="colorAccent">@color/accent</item> </style> 

我得到的正是我想要的android api> = 21,但在其他设备上,我最终与对话框周围的“框”。

有没有办法摆脱对话框中的“盒子”,甚至可以获得应用于api <21的颜色和材质主题,最好没有任何附加的依赖性?

App上的Api <21:

应用程序在API <21

API> = 21的应用程序:

API> = 21的应用程序

Solutions Collecting From Web of "使用AppCompat-v7 22进行对话剥皮会导致api <21上的丑陋阴影"

使用新的AppCompat v22.1您可以使用新的android.support.v7.app.AlertDialog或新的AppCompatDialog

只要使用这样的代码(当然你的情况下,你必须使用自定义布局有进度条)

 import android.support.v7.app.AlertDialog AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.AppCompatAlertDialogStyle); builder.setTitle("Dialog"); builder.setMessage("Lorem ipsum dolor ...."); builder.setPositiveButton("OK", null); builder.setNegativeButton("Cancel", null); builder.show(); 

并使用这样的风格:

 <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> 

如果任何人仍然在寻找一个简单有效的解决scheme,只需将此行添加到“alertDialog”风格:

 <item name="android:windowBackground">@android:color/transparent</item> 

PS改变这个属性也会影响PreferenceFragment在API> = 21上的对话框,所以确保你使用的是不同的样式:透明bg代表API <21,API> = 21没有任何改变

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

所有我的AlertDialogs使用我的自定义主题风格看起来不错,但ProgressDialog的背景有奇怪的覆盖,如OP中所述。

我有一个select是每次构build一个ProgressBar时设置一个特定的样式,但我正在寻找一个应用程序范围的解决scheme。

在这两个链接的帮助下:

如何样式AlertDialogs像Pro和Joerg Richter博客我能够摆脱<21 ProgressDialogs上绘制的额外图层。

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

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

这是我的themes.xml:

 <item name="android:alertDialogTheme">@style/MyAlertDialogTheme</item> <item name="alertDialogTheme">@style/MyAlertDialogTheme</item> <item name="android:alertDialogStyle">@style/MyAlertDialogStyles</item> 

和我的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> 

ProgressDialog – 尝试下面的Android 5

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

要么

 dialog.getWindow().clearFlags(LayoutParams.FLAG_DIM_BEHIND); 

您可以下载修订版本22.1.0(前几天更新)并使用android.support.v7.app.AlertDialog