使用WindowManager添加您自己的自定义视图

简介:

在写手机卫士的时候,用户拨打|接听电话须要显示号码归属地,然后出现了一些异常,在此留下记号。希望对麻友们有帮助:

BUG教程

在使用 view = View.inflate(this, R.layout.ui_toast, null);获得View对象后wm.addView出现错误:

10-12 14:29:06.166: E/AndroidRuntime(1268): Caused by: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@41087ed8 -- permission denied for this window type

解决的方法:

使用另外的方法获取:

LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 mDesktopLayout = inflater.inflate(R.layout.volume_panel, null);

完整代码:

LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 mDesktopLayout = inflater.inflate(R.layout.volume_panel, null);
 // 取得系统窗口
 mWindowManager = (WindowManager) getApplicationContext().getSystemService(WINDOW_SERVICE);
 // 窗口的布局样式
 mLayoutParams = new WindowManager.LayoutParams();
 // 设置窗口显示类型――TYPE_SYSTEM_ALERT(系统提示)
 mLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
 // 设置窗口焦点及触摸:
 // FLAG_NOT_FOCUSABLE(不能获得按键输入焦点)
 mLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
 // 设置显示的模式
 mLayoutParams.format = PixelFormat.RGBA_8888;
 // 设置对齐的方法
 mLayoutParams.gravity = Gravity.TOP | Gravity.LEFT;
 // 设置窗口宽度和高度
 mLayoutParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
 mLayoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
 // 设置窗口显示的位置。否则在屏幕中心显示
 mLayoutParams.x = 50;
 mLayoutParams.y = 50;
 mWindowManager.addView(mDesktopLayout, mLayoutParams);

 

问题总结

这两种方式显示出来的窗体都不会激发当前Activity的onPause()事件。据说还能够先一个窗体风格的Activity。只是显示时会激发当前窗体的onPause()事件。详细咋样没试过。

推荐风格

 

<?xml version="1.0" encoding="utf-8"?

>  <resources>       <style           name="selectorDialog"           parent="@Android:style/Theme.Dialog">           <item name="android:windowFrame">@null</item><!--边框-->           <item name="android:windowIsFloating">true</item><!--是否浮如今activity之上-->           <item name="android:windowIsTranslucent">false</item><!--半透明-->           <item name="android:windowNoTitle">true</item><!--无标题-->           <!--<item name="android:windowBackground">@drawable/selector_dialog_bg</item>背景透明-->           <item name="android:backgroundDimEnabled">false</item><!--模糊-->           <item name="android:backgroundDimAmount">0.6</item>       </style>  </resources>

 

OK,谢谢关注破晓博客


版权声明:本文博客原创文章。博客,未经同意,不得转载。





本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4734812.html,如需转载请自行联系原作者


相关文章
|
消息中间件 数据采集 缓存
性能调优篇:困扰我半年之久的RocketMQ timeout exception 终于被破解了
性能调优篇:困扰我半年之久的RocketMQ timeout exception 终于被破解了
性能调优篇:困扰我半年之久的RocketMQ timeout exception 终于被破解了
|
9月前
|
弹性计算 安全 应用服务中间件
阿里云服务器四种常见购买方式图文教程及适用场景参考(2025更新)
阿里云服务器如何购买?比较常见的购买方式有自定义购买、快速购买、通过活动购买、通过云市场镜像页面购买这四种购买方式,每种方式都有主要的适合对象,购买流程也不是完全一样的。例如想要快速购买的用户,一般选择快速购买、通过活动购买最好,如果是想购买的云服务器已经部署好一些自己项目运行所需的各种环境和软件,则选择通过云市场镜像页面购买这种方式更好。本文为以图文形式为大家展示用户选择较多的四种购买方式及适用场景,以供参考。
1586 16
|
JSON Java 定位技术
【Android App】GPS获取定位经纬度和根据经纬度获取详细地址讲解及实战(附源码和演示 超详细)
【Android App】GPS获取定位经纬度和根据经纬度获取详细地址讲解及实战(附源码和演示 超详细)
4869 1
|
机器学习/深度学习 数据采集 人工智能
智能化运维:未来趋势与挑战
在信息技术迅猛发展的当下,智能化运维成为企业提升效率、保障服务质量的关键。本文将深入探讨智能化运维的定义、核心价值及其在未来技术环境中的发展可能性和面临的主要挑战。通过对现有技术的梳理和案例分析,我们旨在为读者揭示智能化运维的实际应用效果,以及如何通过技术创新来克服实施过程中的难题。
|
数据挖掘 API 数据处理
Python实现简易股票交易系统
Python实现简易股票交易系统
670 1
|
网络安全 数据安全/隐私保护 Windows
[笔记]Windows Cyswin ssh配置及远程控制
[笔记]Windows Cyswin ssh配置及远程控制
271 0
|
存储 分布式计算 监控
Hadoop的NameNode的监控与副本管理
【4月更文挑战第15天】NameNode是Hadoop HDFS的关键组件,负责元数据管理和监控,确保数据安全、可靠和性能。监控包括NameNode的状态、资源使用和性能,以保证集群稳定性。NameNode在副本管理中负责副本创建、分布、维护和删除,确保数据冗余和容错性。有效的监控和副本管理策略对Hadoop集群的高效运行至关重要。
270 2
|
关系型数据库 数据库 数据库管理
关系型数据库中的主键和外键
关系型数据库中的主键和外键
|
SQL 存储 Linux
FreeFileSync 文件备份
需求目标实现 sql server 数据库文件本地+异地备份,备份文件包括:【.bak】数据库的备份文件,包含日志与库数据文件;【.mdf】数据库数据文件,存放一个数据库的数据信息;【.ldf 】数据库日志文件,存放对该数据库的更新操作(增、删、改)的文件;当然以下讲述的方案也可以实现其他文件的备份,按...
617 1
FreeFileSync 文件备份