IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android开发:不需要权限的悬浮窗方案,实战解析 -> 正文阅读

[移动开发]Android开发:不需要权限的悬浮窗方案,实战解析

.blackList(mutableListOf(ThirdActivity::class.java))

.layoutParams(initLayoutParams())

.listener?{

initListener(it)

}

.show(this)




如上所示:



1.  通过layout指定自定义布局。

2.  通过blackList指定不展示悬浮窗界面。

3.  通过layoutParams指定初始展示位置。

4.  通过listener处理自定义点击事件。



**2.销毁悬浮窗**



EasyFloat.dismiss(this)




直接调用dismiss销毁即可。



[]( )主要原理

================================================================



我们都知道,当我们需要设置布局的时候,是通过setContentView设置的  

而setContentView实际上是将我们的布局添加到了DecoreView上,布局层级如下所示



![](https://img-blog.csdnimg.cn/img_convert/6c844b7c546a8bc9ee34fe3e13c18c45.gif)



1.  Activity 类似于一个框架,负责容器生命周期及活动,窗口通过 Window 来管理;

2.  Window 负责窗口管理(实际是子类 PhoneWindow),窗口的绘制和渲染交给 DecorView完成;

3.  DecorView 是 View 树的根,开发人员为 Activity 定义的 layout 将成为 DecorView 的子视图 ContentParent 的子视图;

4.  layout.xml 是开发人员定义的布局文件,最终 inflate 为 DecorView 的子组件;



由上我们可以想到一个方案:



我们在Activity?onStart时,将要悬浮的View添加到ContentParent上就可以实现不需要权限的悬浮窗了。



当然我们还需要注意以下几点:



1.  因为我们需要在多个页面展示悬浮窗,可以通过ActivityLifecycleCallbacks监听所有Activity的生命周期,onStart时添加,onStop时移除。

2.  因为要在多个页面共享状态,所以应该有一个单例类管理View,做到只创建一个View,页面切换时只做添加与移除。

3.  因为要添加到ContentParent中,持有了Activity的引用,所以要注意处理内存泄漏的问题,在项目中我们使用了弱引用来防止内存泄漏。



部分代码如下:



object?EasyFloat?:?Application.ActivityLifecycleCallbacks?{

override?fun?onActivityStarted(activity:?Activity)?{

FloatingView.get().attach(activity)

}

override?fun?onActivityStopped(activity:?Activity)?{

FloatingView.get().detach(activity)

}

fun?show(activity:?Activity)?{

initShow(activity)

activity.application.registerActivityLifecycleCallbacks(this)

}

fun?dismiss(activity:?Activity)?{

FloatingView.get().remove()

FloatingView.get().detach(activity)

activity.application.unregisterActivityLifecycleCallbacks(this)

}

}




[]( )总结

==============================================================



**特别鸣谢**



在实现这个开源框架的过程中,主要借鉴了EnFloatingView的一些思路。



_https://github.com/leotyndale/EnFloatingView_



并在其基础上进行了一定的封装,优化了API调用并解决了滑动冲突等一些问题。



**项目地址**



_https://github.com/shenzhen2017/EasyFloat_



在这里我再分享一份由多位大佬亲自收录整理的**Android学习PDF+架构视频+面试文档+源码笔记**,**高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料**



这些都是我现在闲暇时还会反复翻阅的精品资料。里面对近几年的大厂面试高频知识点都有详细的讲解。相信可以有效地帮助大家掌握知识、理解原理,帮助大家在未来面试取得一份不错的答卷。



当然,你也可以拿去查漏补缺,提升自身的竞争力。



如果你有需要的话,可以直接 **[点击这里快速免费获取]( )**



![](https://img-blog.csdnimg.cn/img_convert/aae7157c8abd9e71d45b4f94668f9a62.png)



![](https://img-blog.csdnimg.cn/img_convert/908d533c3ef489e52bdecfa91771cc75.png)



![](https://img-blog.csdnimg.cn/img_convert/b9bbdb478f63c46512801054e936543a.png)
## 最后

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

下图是我进阶学习所积累的历年**腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题**,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节

>![](https://img-blog.csdnimg.cn/img_convert/7728722988b6474abac12cfe14a67b02.png)


**[CodeChina开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》](https://codechina.csdn.net/m0_60958482/android_p7)**

试题**,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节

>[外链图片转存中...(img-jnfaBW1S-1630832073866)]


**[CodeChina开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》](https://codechina.csdn.net/m0_60958482/android_p7)**

整理不易,望各位看官老爷点个关注转发,谢谢!祝大家都能得到自己心仪工作。
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-06 11:16:16  更:2021-09-06 11:17:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:50:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码