今天做了个很简单的功能,大致是点击某个按钮,弹出一个Dialog,并且可以进行编辑操作,很快做完了,同样也很快得到测试那边反馈说弹出框没有设置圆角,我想设置了啊,在xml上加的背景,我一看还真是圆角未显示出来。。。花费了一段时间才搞明白,于是赶紧总结一下:
原来时Diallog的默认背景是白色,我自定义的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窗口后面的透明度
问题很简单,有点啰嗦了,哈哈,只是为了增加自己的理解。如果错误,请大家及时指出,共同进步。