安卓自定义对话框背景

9
我需要在我的Android应用程序中显示一个自定义对话框。标准的AlertDialog设计是不可接受的。Android文档上说:
提示:如果您想要一个自定义对话框,而不是使用Dialog API,您可以将Activity显示为对话框。只需创建一个Activity并在manifest元素中将其主题设置为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>
5个回答

9
让主题变成这样。
<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>

1
非常感谢您提供的想法。您的解决方案“原样”抛出了异常,因此我只是从android:Theme.Holo.Dialog.NoActionBar继承了我的主题。我更新了我的问题以展示这个解决方案。 - Nick

6

尝试...

您可以通过以下方式避免灰色背景,这里我确实获得了透明背景。

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

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

我喜欢这个答案。是否有类似于对话框主题属性的东西可以取消背后的暗淡效果? - Den Drobiazko

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

2
或许你可以在回答中添加一些更多的上下文信息。解释比仅仅提供代码更有帮助。 - Mattie

0

我已将此用作样式:

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

它还具有背景透明的功能,将backgroundDimEnabled参数设置为false可使不显示在后台对话框中呈现的灰色背景。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接