PopupWindow 设置全屏(覆盖状态栏)

        当 PopupWindow 想要设置成全屏时,如果宽高只设置成 match_parent ,是无法实现全屏的,因为状态栏无法被覆盖,对于低版本(小于等于21时)可以重新计算 popup 的高度,而对于高版本(大于21)系统提供了 setClippingEnabled 方法,设置方法如下:

private void setFullScreen() {

        //sdk > 21 解决 标题栏没有办法遮罩的问题

        if (Build.VERSION.SDK_INT > 21) {

                this.setClippingEnabled(false);

        } else {

                this.setHeight(ScreenUtil.getScreenHeight(context));

        }

}

源码中 setClippingEnabled 方法的注释如下:

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.

If the popup is showing, calling this method will take effect only the next time the popup is shown or through a manual call to one of the {@link #update()} methods.

允许 popup window 超出屏幕范围。默认情况下,popup window 会被剪切到屏幕边界。此方法设置为 false 时,将允许 popup window 精准定位。

如果 popup 正在显示,只调用此方法,全屏效果不会立刻生效,该效果会在下次 popup window 显示时生效;如果需要本次显示时生效,该方法后需要再手动调用{@link #update()}方法才行。

作者备注:所以建议该方法在创建 popup window 时调用。毕竟 update 是要走重绘逻辑的。

你可能感兴趣的:(PopupWindow 设置全屏(覆盖状态栏))