具有额外背景的Android警报对话框

时间:2015-04-02 07:01:17

标签: android alertdialog android-styles

我最近将我的应用程序迁移到了Material Design,我用我的警报对话框偶然发现了这个问题:

dialog appears to be having two backgrounds and I don't know how to get rid of the outer background

我应用这样的对话框样式:

<item name="android:alertDialogTheme">@style/Theme.AlertDialog</item>

Theme.AlertDialog 如下所示:

<style name="Theme.AlertDialog" parent="Base.V14.Theme.AppCompat.Dialog">
    <item name="colorPrimary">@color/theme_primary</item>
    <item name="colorPrimaryDark">@color/theme_primary_dark</item>
    <item name="colorAccent">@color/theme_accent_dark</item>
</style>

这发生在我的Kitkat设备上,它在Lollipop上运行正常。你能帮助我摆脱那个外在的背景吗?

5 个答案:

答案 0 :(得分:10)

重点在于:

<style name="Theme.AlertDialog" parent="Base.V14.Theme.AppCompat.Dialog">
    ...
    <item name="colorPrimary">@color/theme_primary</item>
    <item name="colorPrimaryDark">@color/theme_primary_dark</item>
    <item name="colorAccent">@color/theme_accent_dark</item>
    ...
    <item name="android:windowBackground">@android:color/transparent</item>
    ...
</style>

答案 1 :(得分:4)

正如ironman告诉我here,请确保导入正确的类。

右:import android.support.v7.app.AlertDialog;

错误:import android.app.AlertDialog;

答案 2 :(得分:0)

在父母

中使用主题
AlertDialog.THEME_DEVICE_DEFAULT_LIGHT

答案 3 :(得分:0)

添加以下样式。您还必须自定义背景。

    <item name="android:windowFrame">@null</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowTitleStyle">@null</item>
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
    <item name="android:backgroundDimEnabled">false</item>
    <item name="android:background">@android:color/transparent</item>

使用以下也可以

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

您也可以使用

在代码中设置
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));

这应该在 setContentView

之前
dialog.setContentView(R.layout.dialog);

答案 4 :(得分:0)

我有完全相同的症状但对我而言实际上我使用了标准框架AlertDialog(及其Builder)而不是android.support.v7.app.AlertDialog,切换到使用固定支持库中的那个这个问题对我来说。