Android Overlay View

简介: In Android, one of the tricks is to be able to add a view to the Window and overlay that view on top of all app views (including the desktop). Take the view below.

Testing authority
Settings. CanDrawOverlays (aContext) detects whether a floating window view can be added to the current App.
If true is returned, the permission to add floating views has been obtained.
If false is returned, you need to obtain permissions as described below.
Access permissions
SYSTEM_ALERT_WINDOW, which sets the hover window permission, is a special permission in Android.

To obtain permissions, use the following code.

获取权限
private static final int REQUEST_CODE = 1;
private void requestAlertWindowPermission() {

Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, REQUEST_CODE);

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE) {
    if (Settings.canDrawOverlays(this)) {
      Log.i(LOGTAG, "onActivityResult granted");
    }
}

}

添加悬浮窗视图

fun addOverlay() {

val windowManager = getSystemService(Context.WINDOW_SERVICE) as? WindowManager
val params = WindowManager.LayoutParams()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    //8.0新特性
    params.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
} else {
    params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
}

params.format = PixelFormat.RGBA_8888;
//设置flags
//设置flags
params.flags =
    (WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL //设置flags.不可聚焦及不可使用按钮对悬浮窗进行操控.
            or WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
            or WindowManager.LayoutParams.FLAG_FULLSCREEN //窗口被虚拟按键遮挡问题
            or WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION)
//设置flags.不可聚焦及不可使用按钮对悬浮窗进行操控.
//设置窗口坐标参考系
//设置flags.不可聚焦及不可使用按钮对悬浮窗进行操控.
//设置窗口坐标参考系
params.gravity = Gravity.LEFT or Gravity.TOP
params.x = 0
params.y = 0
params.width = 200
params.height = 200
val container = TextView(this)
overlayContainer = container
container.setBackgroundColor(Color.parseColor("#cce8cf"))
windowManager?.addView(container, params)

}

目录
相关文章
|
2月前
|
前端开发 Android开发 开发者
深入探究Android中的自定义View组件开发
【4月更文挑战第3天】 在现代Android应用程序的开发过程中,创建具有独特功能和高度定制化的用户界面是一个常见需求。为此,理解并掌握自定义View组件的开发成为了开发者必备的技能之一。本文将深入探讨如何在Android中创建自定义View,从基础的绘制原理到事件处理机制,再到性能优化技巧,旨在为读者提供一个全面的技术视角,并通过实例代码演示如何实现一个功能丰富、响应迅速的自定义View组件。
|
2月前
|
缓存 测试技术 Android开发
深入探究Android中的自定义View绘制优化策略
【4月更文挑战第8天】 在Android开发实践中,自定义View的绘制性能至关重要,尤其是当涉及到复杂图形和动画时。本文将探讨几种提高自定义View绘制效率的策略,包括合理使用硬件加速、减少不必要的绘制区域以及利用缓存机制等。这些方法不仅能改善用户体验,还能提升应用的整体性能表现。通过实例分析和性能测试结果,我们将展示如何有效地实现这些优化措施,并为开发者提供实用的技术指南。
|
2月前
|
Android开发 容器
Android UI设计: 什么是View和ViewGroup?
Android UI设计: 什么是View和ViewGroup?
44 0
|
14天前
|
存储 数据库 Android开发
Android中的View显示过程
Android中的View显示过程
17 1
|
25天前
|
XML 前端开发 API
Android中实现Bitmap在自定义View中的放大与拖动
Android中实现Bitmap在自定义View中的放大与拖动
65 1
|
3天前
|
Android开发
Android自定义View之正方形
【6月更文挑战第23天】
|
29天前
|
XML API Android开发
06. 【Android教程】Android 的 UI 根基 View与View
06. 【Android教程】Android 的 UI 根基 View与View
12 1
|
11天前
|
开发工具 Android开发
Android 代码自定义drawble文件实现View圆角背景
Android 代码自定义drawble文件实现View圆角背景
16 0
|
11天前
|
Android开发
Android 自定义View 测量控件宽高、自定义viewgroup测量
Android 自定义View 测量控件宽高、自定义viewgroup测量
16 0
|
11天前
|
开发工具 Android开发 git
Android自定义View——可以设置最大宽高的FrameLayout
Android自定义View——可以设置最大宽高的FrameLayout
22 0