目录介绍
1.全局弹窗分析
2.全局弹窗必要条件
3.全局弹窗实现方式
3.1. 利用系统弹出dialog
3.2. 获取WindowManager,直接添加view
3.3. 在服务里,获取栈顶的Activity,弹窗
4.Dialog实现全局Loading加载框
4.1. 自定义Loading类
4.2. 给自定义的Dialog添加自定义属性
4.3. Loading布局
4.4. 开始使用
5.遇到的问题
5.1. 权限问题
5.2. Unable to add window
6.其他说明
好消息
博客笔记大汇总【16年3月到至今】,包括Java基础及深入知识点,Android技术博客,Python学习笔记等等,还包括平时开发中遇到的bug汇总,当然也在工作之余收集了大量的面试题,长期更新维护并且修正,持续完善……开源的文件是markdown格式的!同时也开源了生活博客,从12年起,积累共计47篇[近20万字],转载请注明出处,谢谢!
如果觉得好,可以star一下,谢谢!当然也欢迎提出建议,万事起于忽微,量变引起质变!
1.全局弹窗分析
开始认为dialog需要依附在Activity上,后经查询可采取悬浮窗的模式,使其不必依附于Activity,可在任一页面弹出
2.全局弹窗必要条件
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);设置dialog的类型
清单文件配置:
3.全局弹窗实现方式
第一个方法利用系统弹出dialog
在alter.show()语句前加入:
alert.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
然后在AndroidManifest.xml中加入权限:android.permission.SYSTEM_ALERT_WINDOW
第二个方法是获取WindowManager,直接添加view
wmParams = new WindowManager.LayoutParams();
//获取的是WindowManagerImpl.CompatModeWrapper
mWindowManager = (WindowManager)getApplication().getSystemService(getApplication().WINDOW_SERVICE);
//设置window type
wmParams.type = LayoutParams.TYPE_PHONE;
//设置浮动窗口不可聚焦(实现操作除浮动窗口外的其他可见窗口的操作)
wmParams.flags = LayoutParams.FLAG_NOT_FOCUSABLE;
//调整悬浮窗显示的停靠位置为左侧置顶
wmParams.gravity = Gravity.LEFT | Gravity.TOP;
// 以屏幕左上角为原点,设置x、y初始值,相对于gravity
wmParams.x = 0;
wmParams.y = 0;
//设置悬浮窗口长宽数据
wmPa