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);

        }