欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

PopupWindow的setClippingEnabled(boolean)用法详述

程序员文章站 2024-01-08 16:02:10
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超出...

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的左上角坐标,应该和参照控件左下角坐标重合。)

PopupWindow的setClippingEnabled(boolean)用法详述

 

Demo2. mPopupWindow.setClippingEnabled(false);  弹窗没有被剪切,显示的位置也是准确的(popupWindow的左上角坐标和参照控件左下角坐标重合)。超出屏幕的部分虽然用户看不到,但是它还在。

 

PopupWindow的setClippingEnabled(boolean)用法详述

 

本文地址:https://blog.csdn.net/Ferrero_xx/article/details/107948824

相关标签: android window