dialog显示在控件的下面(包括获取控件绝对坐标,获取通知栏高度)

时间:2024-04-08 13:12:00

设置 dialog 在点击控件的下面;先看下面的图:

    dialog显示在控件的下面(包括获取控件绝对坐标,获取通知栏高度)

如上图,dialog 在“点我筛选”控件的下面;

思路:需要先获取到通知栏的高度,再获取“点我筛选”控件的 y 轴坐标,最后为dialog设置 y 轴坐标即可;

下面是完整代码,复制直接用即可(创建 dialog 就不再写了);

    private void showDialog() {
        dialog = new Dialog(getActivity(), R.style.UpDialogStyle);
        inflate = LayoutInflater.from(getActivity()).inflate(R.layout.show_dialog, null);
        //弹窗点击周围空白处弹出层自动消失弹窗消失(false时为点击周围空白处弹出层不自动消失)
        dialog.setCanceledOnTouchOutside(true);
        //将布局设置给Dialog
        dialog.setContentView(inflate);
        //获取当前Activity所在的窗体
        Window window = dialog.getWindow();

        WindowManager.LayoutParams wlp = window.getAttributes();

        //获取通知栏高度  重要的在这,获取到通知栏高度
        int notificationBar  = Resources.getSystem().getDimensionPixelSize(

                Resources.getSystem().getIdentifier("status_bar_height", "dimen", "android"));

       //获取控件 textview 的绝对坐标,( y 轴坐标是控件上部到屏幕最顶部(不包括控件本身))
//location [0] 为x绝对坐标;location [1] 为y绝对坐标
        int[] location = new  int[2] ;
        textView.getLocationInWindow(location); //获取在当前窗体内的绝对坐标

        textView.getLocationOnScreen(location);//获取在整个屏幕内的绝对坐标

        wlp.x=0; //对 dialog 设置 x 轴坐标
        wlp.y = location [1] + textView.getHeight() - notificationBar; //对dialog设置y轴坐标
        wlp.gravity = Gravity.TOP;
        wlp.width = WindowManager.LayoutParams.MATCH_PARENT;
        window.setAttributes(wlp);
        dialog.show();//显示对话框

    }

以上的方法便可以实现,dialog 在控件 textView " 点我筛选 " 底部的效果了,可以根据自己需要来改;

    wlp.y = location [1] + textView.getHeight() - notificationBar; //对 dialog 设置y轴坐标

上面这一句代码是最重要的,意思是,textView 的 y 轴绝对坐标 + textView 控件本身的高度 - 通知栏高度;

控件的 y 轴绝对坐标,是控件顶部到屏幕最顶部( 包括通知栏,但不包括自身高度 );

 

更多好内容戳下面:

https://blog.csdn.net/wuqingsen1