popopWindow 实现顶部筛选菜单(顶部不变,底部阴暗)思路记录

本文记录了如何使用PopupWindow创建一个位于Toolbar正下方的筛选菜单,保持顶部不变且底部阴暗的效果。通过在Toolbar下方添加一个暗色背景的View控制显示,以及根据item数量动态适配并限制PopopWindow的高度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先上效果:

需要解决的问题:

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





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值