【问题标题】:android custom dialog backgroundandroid自定义对话框背景
【发布时间】:2012-11-20 02:30:03
【问题描述】:

我需要在我的 Android 应用程序中显示一个自定义对话框。标准AlertDialog 设计是不可接受的。 Android 文档说:

提示:如果您想要自定义对话框,则可以改为显示 Activity 作为对话框而不是使用对话框 API。只需创建一个 活动并将其主题设置为 Theme.Holo.Dialog 在 清单元素:

就是这样。该活动现在显示在对话框窗口中,而不是 全屏。

听起来很有希望。我做到了,但透明度不起作用!背景总是灰色的:

这是清单中的描述:

<activity
    android:name=".MyDialogActivity"
    android:screenOrientation="portrait"
    android:theme="@android:style/Theme.Holo.Dialog.NoActionBar" >
</activity>

这是我活动的根源:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:background="#00000000"
    android:layout_width="400dp"
    android:layout_height="wrap_content" >

    // Content ... //

</RelativeLayout>

我也试过android:background="@null" - 效果是一样的。 如果我使用android:background="#ff0000",那么它是红色的(应该是红色的)。但是如何让它透明呢?

更新

我最终得到了

<style name="MyThemeDialogCustom" parent="android:Theme.Holo.Dialog.NoActionBar" >
    <item name="android:windowBackground">@color/transparent</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
</style>

【问题讨论】:

    标签: android android-dialog


    【解决方案1】:

    制作这样的主题

    <style name="ThemeDialogCustom">
    <item name="android:windowFrame">@null</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
    <item name="android:windowBackground">@color/transparent</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
    </style>
    

    【讨论】:

    • 非常感谢您的想法。你的解决方案“按原样”抛出了一个异常,所以我只是从android:Theme.Holo.Dialog.NoActionBar 继承了我的主题。我更新了我的问题以显示解决方案。
    【解决方案2】:

    试试……

    你可以避免这样的灰色背景,这里我确实得到了透明背景。

        ........
        Dialog dialog = new Dialog(MainActivity.this);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        Window window = dialog.getWindow();
        window.setBackgroundDrawableResource(android.R.color.transparent);
        dialog.setContentView(R.layout.popup_layout);
        Button dialogBtn= (Button) dialog.findViewById(R.id.btn);
    
        dialogBtn.setOnClickListener(new View.OnClickListener() {
    
            @Override
            public void onClick(View v) {
                //task
            }
        });
        dialog.show();
        .......
    

    【讨论】:

      【解决方案3】:
      dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
      

      【讨论】:

      • 我喜欢这个答案。是否有类似 Dialog 主题属性来取消这个暗淡?
      【解决方案4】:
      dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
      

      【讨论】:

      • 也许考虑在您的答案中添加更多上下文。解释比代码更有帮助。
      【解决方案5】:

      我把它当作一种风格:

      <style name="DialogTransparent" parent="Theme.AppCompat.Dialog">
          <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:windowSoftInputMode">stateUnspecified|adjustPan</item>
      
          <item name="android:background">@android:color/transparent</item>
      </style>
      <!-- <item name="android:backgroundDimEnabled">false</item> -->
      

      它还具有背景透明,将 brackgroundDimEnabled 参数设置为 false 可以不显示灰色背景,而他背后的对话框则显示。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-23
        • 1970-01-01
        • 1970-01-01
        • 2011-12-28
        相关资源
        最近更新 更多