android自定义对话框背景

Posted

技术标签:

【中文标题】android自定义对话框背景【英文标题】:android custom dialog background 【发布时间】: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_
    android:layout_ >

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

【问题讨论】:

【参考方案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 可以不显示灰色背景,而他背后的对话框则显示。

【讨论】:

以上是关于android自定义对话框背景的主要内容,如果未能解决你的问题,请参考以下文章

具有自定义视图背景的对话框

自定义对话框,白色透明背景[复制]

从警报对话框中删除黑色背景 - Android

Android 自定义 SeekBar

不是我创建的 Android 默认 alertdialog 背景颜色

自定义 Android Gradle -- 启动 zipalign 优化