PopupWindow的setClippingEnabled(boolean)用法详述
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.
直接翻译:这个方法是设置是否允许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,即茶杯图标)的x,y偏移量都是0。PopopWindow的宽高都是LayoutParams.MATCH_PARENT
Demo1. mPopupWindow.setClippingEnabled(true); 竖直方向超出屏幕部分被剪切了。水平方向,弹窗全部显示在屏幕上,没有被剪切,但是显示位置不是准确的(正确的位置是popupWindow的左上角坐标,应该和参照控件左下角坐标重合。)
Demo2. mPopupWindow.setClippingEnabled(false); 弹窗没有被剪切,显示的位置也是准确的(popupWindow的左上角坐标和参照控件左下角坐标重合)。超出屏幕的部分虽然用户看不到,但是它还在。
本文地址:https://blog.csdn.net/Ferrero_xx/article/details/107948824
推荐阅读
-
Arrays类的用法详述
-
PopupWindow进阶用法——android上实现类似UCweb的自定义menu,完全模拟系统事件
-
PopupWindow进阶用法——android上实现类似UCweb的自定义menu,完全模拟系统事件
-
android菜单Menu结合popupWindow的用法实现弹出在屏幕任意位置!
-
php boolean(布尔)类型的用法举例
-
Arrays类的用法详述
-
PopupWindow的setClippingEnabled(boolean)用法详述
-
php boolean(布尔)类型的用法举例
-
JavaScript Boolean(布尔) 对象的相关知识与用法
-
JavaScript Boolean(布尔) 对象的相关知识与用法