原文地址:使用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。谢谢关注破晓博客


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

采用WindowManager添加您自己的自定义视图的更多相关文章

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

    在写手机卫士的时候,用户拨打|接听电话须要显示号码归属地,然后出现了一些异常,在此留下记号.希望对麻友们有帮助: BUG教程 在使用 view = View.inflate(this, R.layou ...

  2. 自定义视图一:扩展现有的视图,添加新的XML属性

    这个系列是老外写的,干货!翻译出来一起学习.如有不妥,不吝赐教! 简介 这个系列详细的介绍了如何穿件Android自定义视图.主要涉及的内容有如何绘制内容,layout和measure的原理,如何继承 ...

  3. Android自定义视图三:给自定义视图添加“流畅”的动画

    这个系列是老外写的,干货!翻译出来一起学习.如有不妥,不吝赐教! Android自定义视图一:扩展现有的视图,添加新的XML属性 Android自定义视图二:如何绘制内容 Android自定义视图三: ...

  4. Android自定义视图一:扩展现有的视图,添加新的XML属性

    这个系列是老外写的,干货!翻译出来一起学习.如有不妥,不吝赐教! Android自定义视图一:扩展现有的视图,添加新的XML属性 Android自定义视图二:如何绘制内容 Android自定义视图三: ...

  5. 自定义视图引擎,实现MVC主题快速切换

    一个网站的主题包括布局,色调,内容展示等,每种主题在某些方面应该或多或少不一样的,否则就不能称之为不同的主题了.每一个网站至少都有一个主题,我这里称之为默认主题,也就是我们平常开发设计网站时的一个固定 ...

  6. BrnShop开源网上商城第五讲:自定义视图引擎

    今天这篇博文主要讲解自定义视图引擎,大家都知道在asp.net mvc框架中默认自带一个Razor视图引擎,除此之外我们也可以自定义自己的视图引擎,只需要实现IViewEngine接口,接口定义如下: ...

  7. 使用自定义视图的AlertDialog

    使用自定义视图的AlertDialog主要分为以下几个步骤: 1)利用XML文件构建自己的的视图 2)将视图添加到AlertDialog中 * 在进行第二步之前,有时需要对对话框窗口进行额外的设置 下 ...

  8. 创建ASP.NET Core MVC应用程序(4)-添加CRUD动作方法和视图

    创建ASP.NET Core MVC应用程序(4)-添加CRUD动作方法和视图 创建CRUD动作方法及视图 参照VS自带的基架(Scaffold)系统-MVC Controller with view ...

  9. (翻译)为你的MVC应用程序创建自定义视图引擎

    Creating your own MVC View Engine For MVC Application 原文链接:http://www.codeproject.com/Articles/29429 ...

随机推荐

  1. Rational Rose的四种视图介绍

    Rose模型中有四种视图:Use Case View(用例视图),Logical View(逻辑视图),Component View(组建视图)和Deployment View(配置视图). 用例视图 ...

  2. Windows phone 8 学习笔记(9) 集成

    原文:Windows phone 8 学习笔记(9) 集成 本节整理了之前并没有提到的Windows phone 8 系统相关集成支持,包括选择器.锁定屏幕的.联系人的访问等.选择器列举了若干内置应用 ...

  3. 九度 题目1044:Pre-Post

    转载请注明本文链接http://blog.csdn.net/yangnanhai93/article/details/40658571 题目链接:pid=1044">http://ac ...

  4. 认为C/C++很难理解、找工作面试笔试,快看看这本书!

    假设你是C/C++谁刚开始学习,看这本书.因为也许你读其他的书还不如不看.一定要选择一本好书. 假设你正在准备工作,请认真看这本书,由于这本书会教会你工作中必备的知识,相信你即将面临的语法类题目不会超 ...

  5. C#语音录制

    客服小妹是如何泡到手的——C#定时提醒·语音录制·语音播放·文件转录Demo——倾情奉献!   一.需求提出 客服小妹跟我说,每天要统计新加好友数,得先记下昨天的数目,然后查看今天的数目,还要相减,打 ...

  6. Vector Clock理解

    背景近期在重读"Dynamo: Amazon's Highly Available Key-value Store"(经典好文,推荐!).文章4.4 中聊到了Data Versio ...

  7. Android在发送带有附件的邮件

    准备好工作了-下载最新的版本号JMail https://java.net/projects/javamail/pages/Home#Download_JavaMail_1.5.2_Release h ...

  8. 《Head First 设计模式》学习笔记——迭代模式 + 组合模式

    迭代模式设置共生死亡,一般来说.我们只是想实现一个集,我们需要的同时提供这个集合的迭代器,喜欢java中间Collection.List.Set.Map等,这些集合都有自己的迭代器.假如我们要实现一个 ...

  9. VS2010不能编译SQLServer2005的Microsoft.SQLServer.ManagedDTS.dll的解决方法

    VS2010不能编译SQLServer2005的Microsoft.SQLServer.ManagedDTS.dll是最近碰到的一个疑难杂症问题,通过查询微软社区和一些英文资料找到了解决方法,同事说之 ...

  10. win7,win8取得管理员权限 .reg文件

    Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\runas] @="获取管理员所有权" " ...