android悬浮窗

Android悬浮窗实现 使用WindowManager

我怕爱的太早我们不能终老 提交于 2020-03-09 06:15:34
本文转载自: http://blog.csdn.net/stevenhu_223/article/details/8504058 悬浮窗口的实现涉及到WindowManager(基于4.0源码分析),它是一个接口,实现类有WindowManagerImpl,CompatModeWrapper(WindowManagerImpl的内部类),LocalWindowManager(Window的内部类),它们之间的关系如下图的类图: WindowManagerImpl: 1.是WindowManager的实现类,windowmanager的大部分操作都在这里实现,但是并不会直接调用,而是作为LocalWindowManager和WindowManagerImpl.CompatModeWrapper的成员变量来使用。 2.在WindowManagerImpl中有3个数组View[],ViewRoot[],WindowManager.LayoutParams[],分别用来保存每个图层的数据。 3.WindowManagerImpl最重要的作用就是用来管理View,LayoutParams, 以及ViewRoot这三者的对应关系。 LocalWindowManager: 在源码的Activity类中,有一个重要的成员变量mWindow(它的实现类为PhoneWindow)

Android悬浮窗的坑

[亡魂溺海] 提交于 2020-02-27 19:56:16
前言 重构了公司的一个项目,有一处用到了悬浮窗,就是程序后台运行后,悬浮窗依然可以显示到界面上。重构完准备上线,后来发现在6.0手机上有问题,无法显示,百般对比重构之前的代码,总感觉没什么不一样了呀,为什么别人代码写乱七八糟的都可以,我的写么好竟然不行。花了好多时间,百度什么的也找不到原因,真的是花了好多时间才找到了原因,这里记录一下解决问题的思路。 悬浮窗在Android6.0的坑 我有个解决问题的技巧就是写个小Demo,这样就没有其他不相关的代码,Demo里只写关于悬浮窗的代码,新建一个项目,语言选Kotlin,最小SDK为15,其它都默认,我用的是最新版本的AndroidStudio,什么Gradle什么鬼的都是更新到了最新的,项目创建好之后打开MainActivity,写代码,如下: class MainActivity : AppCompatActivity ( ) { override fun onTouchEvent ( event : MotionEvent ) : Boolean { if ( event . action == MotionEvent . ACTION_DOWN ) { val button = Button ( this ) . apply { text = "你好" ; setOnClickListener { Toast .