Android Dialog去掉黑色背景

本文介绍了如何在Android中自定义Dialog并去除其黑色背景。通过设置样式,包括windowFrame为null,windowBackground为透明色,以及调整对话框属性,实现只显示自定义ContentView的效果。同时提供了一个自定义Dialog的示例,展示如何应用这些风格。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android Dialog去掉黑色背景

不同版本的Dialog不一样,为了统一Dialog的界面同时也想定义一个更好看的Dialog,所以我们经常会使用自定义的Layout并且调用setContentView加载到Dialog,但是我们会发现contentView显示出来了,但是他的后面会有一点黑框框的边角料,百度搜了一下,按下面定义一个样式:

    <style name="MyDialog" parent="Animation.AppCompat.Dialog">
    <item name="android:windowFrame">@null</item>
    <!--最后面是window background-->
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowNoTitle">false</item>
    <!--这个不设置它会沾满屏幕-->
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <!-- 设置contentview的背景图-->
    <item name="android:background">@drawable/myshape</item>

</style>

解释一下这个这段代码
1.<item name="android:windowFrame">@null</item>windowFrame属性的值可以是drawable,设置完了这个drawable就会显示在Dialog的前面,挡住我们的视线,所以这里我们设置为null。
2.<itemname="android:windowBackground">@android:color/transparent</item>这段是主要代码,我们把它设置成了android:color/transparent (透明色)这样后面的黑边就没有了。我是这样理解的(没有研究过源码,纯属测试之后的个人理解)。在dialog显示的弹框中,最底层的是一个Window,在window上面就是我们的ContentView,也可以这两理解:把一幅画挂在墙上,墙就是Window,画就是ContentView,我们把windowBackground设置成透明的,这样我们就只可以看到画而看不到墙了
3.<item name="android:background">@drawable/myshape</item>这个是给ContentView设置的background,也可以不写这里,写在自定义的布局里面。

4.<item name="android:windowIsFloating">true</item>这个设置成true的时候就是正常的弹框,设置成false就会全屏。

5.<item name="android:windowContentOverlay">@null</item>官方文档这样写的This Drawable is overlaid over the foreground of the Window's content area, usually to place a shadow below the title.也就是这个可以设置一个drawable或者color,一般是半透明的,然后就会在ContentView区域显示(相当于使你的Contentview有朦胧感)。

最后我们需要做的就是自定义MyDialog继承Dialog然后把带有Theme的方法设置成public然后new的时候把自定义的style传进去就可以了,,如下。

public class MyDialog extends Dialog {
public MyDialog(Context context) {
    super(context);
}

public MyDialog(Context context, boolean cancelable, OnCancelListener cancelListener) {
    super(context, cancelable, cancelListener);

}

public MyDialog(Context context, int theme) {
    super(context, theme);

}
}
//然后调用new MyDialog(this,R.style.MyDialog)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值