【问题标题】:Android Alert Dialog with extra background带有额外背景的 Android 警报对话框
【发布时间】:2015-06-07 01:13:28
【问题描述】:

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

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

<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 上运行良好。你能帮我摆脱那个外部背景吗?

【问题讨论】:

  • 你应该使用新的android.support.v7.app.AlertDialog
  • 嗯,这实际上是一个首选项屏幕,您看到的对话框实际上是一个列表首选项,我认为我无法更改对话框的类型。接受的答案工作正常...

标签: android android-alertdialog android-styles


【解决方案1】:

重点在这里:

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

【讨论】:

  • 透明背景在边缘设备上是个问题,因为没有默认对话框背景,所以整个对话框都是透明的
  • 它可以在所有设备上制作透明背景,但只需要移除奇怪的边框。该怎么做?
【解决方案2】:

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

正确:import android.support.v7.app.AlertDialog;

错误:import android.app.AlertDialog;

【讨论】:

    【解决方案3】:

    在父级中使用主题

    AlertDialog.THEME_DEVICE_DEFAULT_LIGHT
    

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • 谢谢,我唯一要做的就是将 ​​@android:color/transparent 添加到我的 Theme.AlertDialog 中。正如 SilentKnight 在他的回答中指出的那样。
      • 该解决方案似乎不适用于三星边缘设备
      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 2021-11-08
        • 2012-01-30
        • 2013-01-07
        • 2011-03-08
        • 2014-03-13
        • 1970-01-01
        • 1970-01-01
        • 2017-11-10
        • 1970-01-01
        相关资源
        最近更新 更多