天天看點

安卓popupWindow高度設定為WRAP_CONTENT時擷取高度

背景

選擇多規格菜品時,會使用popupWindow在菜品下方彈出待選擇的規格。popupWindow支援下方展示不開時,自動移到上方展示,但實際并沒有,而是下方被遮蓋。

安卓popupWindow高度設定為WRAP_CONTENT時擷取高度

問題原因

popupWindow在建立時未聲明高度,而是根據資料動态渲染内容,高度也是動态的。

PopupWindow在建立時寬度高度設定為match_parent或者wrap_content時,通過getWidth、getHeight或者getContentView.getMeasuredWidth、getContentView.getMeasuredHeight 不能擷取到真實的高度!

期待效果

預設在菜品下方展示,展示不開時,在菜品上方展示。

安卓popupWindow高度設定為WRAP_CONTENT時擷取高度

解決方案

正确的方法擷取高度的方法是建立之後調用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());