Android - 设置应用程序顶部的叠加视图

问题描述 投票:0回答:2

我见过一些应用程序能够从辅助功能服务添加覆盖视图,当“设置”应用程序位于前台时,这些视图在锁定屏幕上也可见(!!)。

我已经实现了添加叠加层,但当“设置”应用程序位于前台和锁定屏幕上时,它们会自动隐藏。我也需要为我的应用程序实现这一点。

有人知道如何实现这一目标吗?

android android-service overlay android-windowmanager
2个回答
0
投票

使用窗口管理器执行此操作的一种方法,TYPE_SYSTEM_OVERLAY

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
    WindowManager.LayoutParams.MATCH_PARENT,
    WindowManager.LayoutParams.MATCH_PARENT,
    WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
    WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
    PixelFormat.TRANSLUCENT);
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);


View overlayView = LayoutInflater.from(this).inflate(R.layout.overlay_layout, null);
wm.addView(overlayView, params);

为覆盖视图创建一个overlay_layout.xml 文件。


0
投票

所以我找到了答案。方法是使用辅助功能服务并通过该服务添加覆盖视图,并使用 TYPE_ACCESSIBILITY_OVERLAY 作为 WindowManager.LayoutParams 中的类型参数。

params = new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
                WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|
            WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH|
            WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL|
            WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
            PixelFormat.TRANSLUCENT);
© www.soinside.com 2019 - 2024. All rights reserved.