使用AppCompat-v7 22进行对话皮肤处理会在api上造成难看的阴影。 21

时间:2015-04-13 14:39:53

标签: android android-support-library material-design android-appcompat

我正在使用AppCompat来编写一个材质设计风格的应用程序。由于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&gt; = 21上得到了我想要的东西,但在其他设备上我最终在对话框周围出现了一个“框”。

有没有办法摆脱对话框周围的“盒子”,甚至可以在api上使用颜色和材质主题。 21,最好没有任何额外的依赖?

App上Api&lt; 21:

App on API < 21

API上的App&gt; = 21:

App on API >= 21

5 个答案:

答案 0 :(得分:33)

使用新的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(); ,您可以使用新的the other thread或新的android.support.v7.app.AlertDialog

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

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

使用这样的风格:

{{1}}

答案 1 :(得分:10)

如果有人仍在寻找简单有效的解决方案,只需将此行添加到您的&#34; alertDialog&#34;式:

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

P.S。更改此属性还会影响API&gt; = 21上的PreferenceFragment对话框,因此请确保使用不同的样式:使用透明bg进行API&lt; 21,并且API没有任何更改&gt; = 21

答案 2 :(得分:6)

在为所有AlertDialogs使用android.support.v7.app.AlertDialog时,我遇到了与新AppCompat 22库完全相同的问题,但额外的背景图层仅影响了ProgressDialogs。

使用我的自定义主题设置样式时,我的所有AlertDialog看起来都很棒,但是ProgressDialog在背景上有如背景中描述的奇怪叠加。

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

借助这两个链接:

How to Style AlertDialogs like a ProJoerg Richter Blog我能够摆脱&lt;&lt;&lt; 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>

答案 3 :(得分:6)

ProgressDialog - 尝试以下android 5

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

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

答案 4 :(得分:2)

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