您的位置:首页 > 其它

解决圆角dialog黑色(白色)背景问题

2017-04-24 14:52 260 查看

解决圆角dialog黑色(白色)背景问题

当把dialog的背景设置为圆角时,绝大部分会碰到四个角有不和谐背景的情况

网上解决办法很多基本上分为设置style,布局嵌套,设置window属性

也亲自尝试了一下,效果总是时好时坏,于是结合各方法做一次总结

要想实现圆角,dialog的布局(自定义)的根节点不能设置背景或者颜色,否则无论哪种方法都不能去掉圆角背景

最好是自定义dialog,并在onstart中设置window属性

完成了上两步,style就可有可无了,为了避免小瑕疵(例如莫名多出一条线)建议还要带上,如下

<style name="dialog" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@color/transparent</item>
<!-- 边框 -->
<item name="android:windowIsFloating">true</item>
<!-- 是否浮现在activity之上 -->
<item name="android:windowIsTranslucent">true</item>
<!-- 半透明 -->
<item name="android:windowNoTitle">true</item>
<!-- 无标题 -->
<item name="android:background">@color/transparent</item>
<!-- 背景色 -->
<item name="android:windowBackground">@color/white</item>
<!-- 背景透明 -->
<item name="android:backgroundDimEnabled">true</item>
<!-- 模糊 -->
<item name="android:windowFullscreen">true</item>
<!-- 全屏 -->
</style>


构造方法中设置style

public MyDialog(Context context) {
super(context, R.style.dialog);
init();
}


自定义dialog中设置window属性

@Override
protected void onStart() {
super.onStart();
getWindow().setBackgroundDrawableResource(android.R.color.transparent);
}


设置dialog布局,init()方法可在构造方法中调用

private void init() {
setContentView(R.layout.dialog);
}


这样弹出的dialog就会正常显示布局中的圆角了

备注

实现dialog样式的方式有两种

Activity作为Dialog样式弹出

使用 T extends Dialog类

Dialog类或者其子类的弹出不会触发Activity的生命周期

Activity作为Dialog则会触发上个Activity的oPause方法,消失时触发onResume方法

为了感谢看完本文的童鞋,特地献上福利图片一张。。。。。。。。。请注意:

如果你屏幕旁有人在,请谨慎往下观看!!!!!!!!!

如果你屏幕旁有人在,请谨慎往下观看!!!!!!!!!

如果你屏幕旁有人在,请谨慎往下观看!!!!!!!!!

福利


#### 好记性不如烂笔头

最近公司用了一个 bug 管理平台 mantis 告别 禅道

记录几个
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dialog-圆角