背景
選擇多規格菜品時,會使用popupWindow在菜品下方彈出待選擇的規格。popupWindow支援下方展示不開時,自動移到上方展示,但實際并沒有,而是下方被遮蓋。
問題原因
popupWindow在建立時未聲明高度,而是根據資料動态渲染内容,高度也是動态的。
PopupWindow在建立時寬度高度設定為match_parent或者wrap_content時,通過getWidth、getHeight或者getContentView.getMeasuredWidth、getContentView.getMeasuredHeight 不能擷取到真實的高度!
期待效果
預設在菜品下方展示,展示不開時,在菜品上方展示。
解決方案
正确的方法擷取高度的方法是建立之後調用measure方法對View進行測量,然後擷取寬度與高度!popupWindow有了高度後,就會正常展示。
final PopupWindow popupWindow = new PopupWindow(view, LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
popupWindow.getContentView().measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
popupWindow.setHeight(popupWindow.getContentView().getMeasuredHeight());