WindowManager设置添加的View全屏(覆盖状态栏和导航栏)

关键是修改WindowManager.LayoutParams

关键参数是设置忽略父窗口中的任何约束允许窗口扩展到屏幕之外

params.flags = WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN or
                WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS

和设置手机真正的高度(包括导航栏和状态栏

val screenSize = Point()
windowManager.defaultDisplay.getRealSize(screenSize)
params.height = screenSize.y

完整代码: 

        val windowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager

        val params = WindowManager.LayoutParams()
        // 设置Window Type
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
            params.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY
        else params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT
        // 设置全屏最重要的参数是FLAG_LAYOUT_IN_SCREEN、FLAG_LAYOUT_NO_LIMITS
        params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or
                WindowManager.LayoutParams.FLAG_FULLSCREEN or
                WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN or
                WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS or
                WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR or WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL

        params.gravity = Gravity.START or Gravity.TOP
        params.format = PixelFormat.RGBA_8888
        val screenSize = Point()
        windowManager.defaultDisplay.getRealSize(screenSize)
        params.width = screenSize.x
        params.height = screenSize.y //设置手机真正的分辨率高度(包括导航栏和状态栏)

        // 添加你需要显示的布局
        windowManager.addView(view, params)

参考大佬的文章:https://gist.github.com/kakajika/973667ccc945a1ad10e6eba0cef0f793 

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值