Android在Dialog中顯示PopupWindow不全問題解決

陳英有發表於2014-05-13

問題:

使用PopupWindow的showAtLocation(View parent,Gravity g,int x ,int y)方法來指定它的位置。
如果parent引數傳Dialog上的控制元件,PopupWindow顯示是在Dialog之上,但是他的顯示位置會因為Dialog的大小而載掉一部分;
如果parent引數傳Window.getDecorView(),g,x和y的值不變,PopupWindow是在螢幕下方彈出,但是會被Dialog層擋住。

網上解決方法如下:

1、例項化PopupWindow時,設定其width為螢幕寬度;
2、獲取PopupWindow的高度:
popup.getContentView().measure(0, 0);
int height = popup.getContentView().getMeasuredHeight();
3、呼叫showAtLocation方法時,第一個引數傳Dialog上的View,比如edit,呼叫方法如下:
showAtLocation(edit,Gravity.BOTTOM,0,-height);
這樣彈出PopupWindow就會在螢幕下方,並且懸浮在Dialog之上而不會被Dialog遮擋。

我的解決方法:

設定dialog背景透明的風格,並把dilog大小設定為全屏,dilog的內容居中,再設定PopupWindow即可!
設定Dialog全屏 程式碼:
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.width = getContext().getResources().getDisplayMetrics().widthPixels;
lp.height = getContext().getResources().getDisplayMetrics().heightPixels; // 如果不是全屏要送去狀態列高度
getWindow().setAttributes(lp);




相關文章