popopWindow 實現頂部篩選選單(頂部不變,底部陰暗)思路記錄
阿新 • • 發佈:2019-02-10
先上效果:
需要解決的問題:
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);
}