popopWindow 实现顶部筛选菜单(顶部不变,底部阴暗)思路记录
先上效果:
需要解决的问题:
1.popopWindow 位置(此处为toolbar正下方)
2.顶部不变,底部阴暗
3.popopWindow 根据item个数适配高度,并设置最大height
一、popopWindow 位置
首先第一点,传入的parent为toolbar。下面的location位置为toolbar在屏幕中位置的左上角那个点(x,y)
int[] location = new int[2];
parent.getLocationOnScreen(location);
popupWindow = new PopupWindow(view, popWidth, LayoutParams.WRAP_CONTENT); popupWindow.setFocusable(true); popupWindow.setOutsideTouchable(true); popupWindow.setBackgroundDrawable(new BitmapDrawable());
popupWindow.showAtLocation(view, Gravity.NO_GRAVITY, ScreenUtils.getScreenWidth(parent.getContext())- popupWindow.getWidth()-DensityUtil.dip2px(context,10), location[1] + parent.getHeight());
二、顶部不变,底部阴暗
第一次尝试
WindowManager.LayoutParams lp = context.getWindow().getAttributes(); lp.alpha = alpha; context.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); context.getWindow().setAttributes(lp);
标题栏也会变暗,尝试失败。
第二次尝试
在toolbar下方放一个view(背景色为暗色)占满剩余屏幕,通过popupwindow展示与否,来控制view的显示与否来实现
尝试成功。
三、popopWindow 根据item个数适配高度,并设置最大height
其他弹出类的窗口类似!在获取width与height之前先进行测量!myView为展示的listview,通过获取其高度,并与最大高度比较来决定最终使用的高度值。
PopupWindow pw= new PopupWindow(myView, ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
int maxH = DensityUtil.dip2px(getActivity(), 80);
myView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
if(myView.getMeasuredHeight()>maxH){
pw.setHeight(maxH);
}