设置 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