1. 程式人生 > >popopWindow 實現頂部篩選選單(頂部不變,底部陰暗)思路記錄

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