-
Notifications
You must be signed in to change notification settings - Fork 132
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
Ps: 为什么要插入到 DecorView
,而不是 R.id.content -> FrameLayout
?
插入到
DecorView
可以最大程度控制悬浮窗的自由度,即悬浮窗可以真正意义上[全屏
]拖动。插入到
content
中,其拖动范围其实为 应用视图范围 ,即摆放位置 受到 状态栏 和 底部导航栏 以及 默认的AppBar
影响, 比如当用户隐藏了状态栏或者导航栏,相对应的视图大小会发生改变,将影响悬浮窗的位置摆放。