首页 > 解决方案 > 在 Android 上绘制边缘叠加

问题描述

我尝试在互联网上搜索有关屏幕覆盖/绘制 android 应用程序的信息。我知道从Android O开始,

WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY

已弃用。

我想制作像 Muviz Edge 这样的叠加视图。但我找不到如何像那个应用程序那样在状态栏下方或上方绘图。

Muviz 应用程序如何在不使用的情况下做到这一点

TYPE_SYSTEM_OVERLAY Flag.

Muviz 边缘应用程序覆盖

这是我的叠加层,左上角的红色文本在状态栏后面

标签: androidscreen

解决方案


在互联网上搜索了几个小时并测试了不同的可能标志后,我得到了自己的答案

WindowManager.LayoutParams

Flags 我意识到我在寻找错误的方向。

为了绘制整个屏幕,第四个参数

WindowManger.LayoutParams

应该

 WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS

而不是其他标志。

窗口管理器布局参数的完整代码是

val LAYOUT_FLAG: Int
    LAYOUT_FLAG = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY
    } else {
        WindowManager.LayoutParams.TYPE_TOAST
    }
    params = WindowManager.LayoutParams(
        WindowManager.LayoutParams.MATCH_PARENT,
        WindowManager.LayoutParams.MATCH_PARENT,
        LAYOUT_FLAG,  
        WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
                or WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
        PixelFormat.TRANSLUCENT
    )

推荐阅读