setClippingEnable方法源碼中的注釋如下:
Allows the popup window to extend beyond the bounds of the screen. By default the window is clipped to the screen boundaries. Setting this to false will allow windows to be accurately positioned.
直接翻譯:這個方法是設(shè)置是否允許popupwindow超出屏幕邊界嫁乘,默認的展融,彈窗超出屏幕邊界是要被剪裁掉。如果傳入false,將允許彈窗顯示實際的(正確無誤)位置。
對于原文注釋有2點補充說明:
1. 默認值是true(? 源碼:private boolean mClippingEnabled =true;)窜管。換句話說setClippingEnabled(true)项秉,超出屏幕邊界的部分是要被剪裁掉的,哪部分被剪裁呢劲室?還是上源碼
if (mIsDropdown && (mClipToScreen ||mClippingEnabled)) {
? ? gravity |= Gravity.DISPLAY_CLIP_VERTICAL;
}
Gravity.DISPLAY_CLIP_VERTICAL伦仍,這個屬性的意思是垂直剪裁。也就是垂直方向超出窗口的剪切掉很洋,水平方向超出屏幕部分不做處理充蓝。
2."accurately positioned":這個怎么翻譯感覺味道都不太對,其實就是別管屏幕邊界在哪兒喉磁,popupWindow實際該怎么顯示就怎么顯示谓苟,超出屏幕部分,顯示不出來(用戶看不到)协怒,那就顯示不出來吧涝焙。
看具體效果前,先說明一下demo代碼的前提條件:popupwindow是以showAsDropDown方式彈出孕暇,基于參照控件(截圖中ImageView仑撞,即茶杯圖標(biāo))的x,y偏移量都是0。PopopWindow的寬高都是LayoutParams.MATCH_PARENT
Demo1. mPopupWindow.setClippingEnabled(true);? 豎直方向超出屏幕部分被剪切了妖滔。水平方向隧哮,彈窗全部顯示在屏幕上,沒有被剪切座舍,但是顯示位置不是準(zhǔn)確的(正確的位置是popupWindow的左上角坐標(biāo)沮翔,應(yīng)該和參照控件左下角坐標(biāo)重合。)
Demo2. mPopupWindow.setClippingEnabled(false);? 彈窗沒有被剪切簸州,顯示的位置也是準(zhǔn)確的(popupWindow的左上角坐標(biāo)和參照控件左下角坐標(biāo)重合)鉴竭。超出屏幕的部分雖然用戶看不到,但是它還在岸浑。