自定义的AlertDialog时碰到的问题
一、自定义的Dialog变得特别小
二、对话框一直显示在屏幕上不消失
三、使用setDialog()设置对话框大小不成功和有空白部分
- 过程
在网上查找了很多,比较好用的一种方法就是通过setLayout()这种方法来调节对话框的尺寸,里面的两个参数是宽和高,例如setLayout(1000,300);
改完之后又出现了一个问题,‘’是‘’和‘’否‘’这两个选项按钮下面空了好多,效果像这样:
底色设置为土黄色是为了对比明显,很显然,我本来的想法是对话框整个变大,相应的布局跟随调整,而下面多出的这一块不是我需要的。经过我对布局的多次调整测试发现,对话框的长宽调节是受到布局的限制的,调节的过程如下:
首先,上面所说的对话框对应的自定义布局是这样的
然后将布局进行调节,调节后如下:
此时运行后的对话框就成了这样:
很显然,出现这种问题是我布局的问题,或者换个方面来说,是我设置的高度,超出了第一个布局所允许的最大高度,所以会自动填充一块给我。那么解决的办法很简单了,只需要对布局上下进行拉伸即可。
紧接着,这时候出现了一个问题,点击了是确实回到了首页,但是对话框却一直在屏幕上,此时,不管再次点是或者否都不会再执行任何操作。
后来我发现,因为是自定义的布局,并没有默认的dismiss(): 方法来关闭或者说解散对话框,那么在完成是或否的事件处理之后,需要对其进行释放,即调用alertDialog.dismiss();。
有关部分代码如下:
@Override
public boolean onSupportNavigateUp() {
//定义用于显示的AlertDialog
final AlertDialog alertDialog;
if(controller.getCurrentDestination().getId()==R.id.questionFragment){
//获得自定义的Dialog布局
View view=LayoutInflater.from(MainActivity.this).inflate(R.layout.doalog_layout,null);
//定义AlertDialog.Builder来构建AlertDialog
AlertDialog.Builder builder=new AlertDialog.Builder(this);
builder.setView(view);//将自定义的布局设置上去(必须放在builder.create()之前,否则不起作用)
alertDialog=builder.create();//将构建出AlertDialog给alertDialog
//设置自定义alertDialog的背景
alertDialog.getWindow().setBackgroundDrawable(getResources().getDrawable(R.drawable.dialog_style,null));
//设置对话框周围的颜色为透明
alertDialog.getWindow().setDimAmount(0);
//绘制出对话框
alertDialog.show();
yes=view.findViewById(R.id.textView12);
no=view.findViewById(R.id.textView11);
// final AlertDialog finalAlertDialog = alertDialog;
yes.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
controller.navigateUp();
// finalAlertDialog.dismiss();
alertDialog.dismiss();
}
});
no.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// finalAlertDialog.dismiss();
alertDialog.dismiss();
}
});
// finalAlertDialog.getWindow().setLayout(1000,500);
alertDialog.getWindow().setLayout(1000,500);
}else if(controller.getCurrentDestination().getId()==R.id.titleFragment){
finish();
}else {
controller.navigate(R.id.titleFragment);
}
return super.onSupportNavigateUp();
}