Skip to content

4. 技术实现原理

Petterp edited this page Aug 10, 2021 · 3 revisions

App 级别悬浮窗 基于 DecorView 的的实现方案,全局持有一个单独的悬浮窗 View ,通过 AppLifecycle 监听 Activity 生命周期,并在相应时机 插入到 DecorView 上 ;

View 级别悬浮窗,基于给定的 ViewGroup ;

Fragment 级别,基于其对应的 rootView ;

Acrtivity 级别,基于 DecorView 内部的 R.id.content ;

具体如下:

Activity-setContentView

具体参见我的博客:源码分析 | Activity-setContentView

Ps: 为什么要插入到 DecorView ,而不是 R.id.content -> FrameLayout ?

插入到 DecorView 可以最大程度控制悬浮窗的自由度,即悬浮窗可以真正意义上[全屏]拖动。

插入到 content 中,其拖动范围其实为 应用视图范围 ,即摆放位置 受到 状态栏底部导航栏 以及 默认的 AppBar 影响, 比如当用户隐藏了状态栏或者导航栏,相对应的视图大小会发生改变,将影响悬浮窗的位置摆放。

Clone this wiki locally