自定义的AlertDialog时碰到的问题

自定义的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();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值