android自定义对话框背景

时间:2012-12-02 12:52:57

标签: android android-dialog

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

  

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

     

     

那就是它。活动现在显示在对话框窗口中而不是   全屏。

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

enter image description here

这是清单中的一个desc:

<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 个答案:

答案 0 :(得分:5)

制作这样的主题

<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 :(得分:3)

...试

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

    ........
    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 :(得分:2)

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

答案 3 :(得分:0)

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

答案 4 :(得分: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> -->

它还具有背景透明性,将brackgroundDimEnabled参数设置为false可用于不显示对话框背面显示的灰色背景。