Android Dialog圆角设置无效的问题

今天做了个很简单的功能,大致是点击某个按钮,弹出一个Dialog,并且可以进行编辑操作,很快做完了,同样也很快得到测试那边反馈说弹出框没有设置圆角,我想设置了啊,在xml上加的背景,我一看还真是圆角未显示出来。。。花费了一段时间才搞明白,于是赶紧总结一下:
原来时Diallog的默认背景是白色,我自定义的Dialog背景也是白色,因为都是白色,所以我们应该做什么呢?我们需要把Dialog的背景设为透明,这样圆角就能显示出来了,为了突出效果,我们来分析两组不同情况的对比图:

第一组:反应的情况就是我们标题所说的设置圆角无效的问题,因为Dialog的默认背景色是白色的,所以白色圆角显示不出来(体会一下,例如一个正方形全白,里面有个圆也是全白,你肯定发现不了正方形里面还有个圆),此时我们应该怎么做显示圆角呢?方法一:把Dialog的背景颜色,设为别的颜色,和白色区分开来。 方法二:把Dialog背景设为透明。很显然为了页面符合UI的要求,我们选择第二种,只要在自定义的Dialog里面加上getWindow().setBackgroundDrawable(newColorDrawable(Color.TRANSPARENT));这句话进行了,设置背景透明,在很多地方都可以加,我一般在重写onCreate里面加。
第二组:也是我们常见到的一种情况,此时我们Dialog的背景不再是白色,例如这里背景颜色是#666666,可是图一出现了圆角四周有白色,这也证明了上面说的Dialog的背景默认为白色,同样我们还是把Dialog的背景设为透明方法同上,但是现在会出现这组图片图二的问题了,白色棱角没了,可是和四周也区分不开来了,这时我们只需把Dialog周围的背景透明度调为透明就行了 getWindow().setDimAmount(0f);//设置Dialog外部的透明度,此时就来到了我们图三,问题就解决了。 这里贴一下我使用的一个简单的Dialog代码吧
public class PacketLabelDialog  extends Dialog implements View.OnClickListener {


    private TextView mTvSelect;//确定
    private TextView mTvCancel;//取消
    private EditText mContent;//内容
    private PacketLabelDialogLister mPacketLabelDialogLister;
    private String  content;//内容

    public interface PacketLabelDialogLister {

        void onSelect(String text);//选择

        void onCancel();//取消

    }

    public  PacketLabelDialog(@NonNull Context context) {
        super(context);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));//设置Dialog背景透明
        getWindow().setDimAmount(0f);//设置Dialog窗口后面的透明度
        setContentView(R.layout.dialog_packet_label);
        setCanceledOnTouchOutside(true);

        mTvSelect=findViewById(R.id.yes);
        mTvCancel=findViewById(R.id.no);
        mContent=findViewById(R.id.et_content);

        mTvCancel.setOnClickListener(this);
        mTvSelect.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.yes:
                if(mPacketLabelDialogLister !=null){
                    content=mContent.getText().toString();
                    mPacketLabelDialogLister.onSelect(content);
                }
                break;
            case R.id.no:
                if(mPacketLabelDialogLister !=null){
                    mPacketLabelDialogLister.onCancel();
                }
                break;
            default:
                break;
        }
    }

    public PacketLabelDialogLister getmPacketLabelDialogLister() {
        return mPacketLabelDialogLister;
    }

    public void setmPacketLabelDialogLister(PacketLabelDialogLister mPacketLabelDialogLister) {
        this.mPacketLabelDialogLister = mPacketLabelDialogLister;
    }
}

总结:
1.Dialog设置圆角时,需要将Dialog的背景设为透明,代码:getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));//在自定义Dialog很多地方都以加。
2.当Dialog有白色棱角时,也需要将Dialog设为透明,有时还要讲Dialog窗口后面的背景设为透明,
代码:getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
getWindow().setDimAmount(0f);//设置Dialog窗口后面的透明度

问题很简单,有点啰嗦了,哈哈,只是为了增加自己的理解。如果错误,请大家及时指出,共同进步。

  • 11
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值