SystemUIDialog 小结
来源:互联网 发布:淘宝客推广怎么样 编辑:程序博客网 时间:2024/05/27 20:52
有时我们为android系统SystemUI部分添加功能的时候,需要弹出一个Dialog来通知用户,但是SystenUI中的大部分类虽然提供了Context,但是却没有绑定相应的Activity。虽然这里的参数是AlertDialog.Builder(Context context)但我们不能使用getApplicationContext()获得的Context,而必须使用Activity.一般的Toast可以正常创建,但是如果需要创建AlertDialog的话在最后AlertDialog.show()会报出 Unable to add window – token null is not for an application 这个错误,这个错误正式因为作为构造参数传进去的context没有绑定相应的Activity。
但是,我们的google大大非常友好的给我们提供了这个工具类 com.android.systemui.statusbar.phone.SystemUIDialog;
你可以在SystemUI/ 的任意地方(在我目前使用到所有SystemUI的子包下面都没有问题)new一个这个类的实例来进行AlertDialog的弹出。
让我们看看SystemUIDialog是如何解决这个问题的,首先SystemUIDialog继承了AlertDialog 然后在它的构造方法中首先调用AlertDialog的构造方法,
public SystemUIDialog(Context context){ super(context,R.style.Theme_SystemUI_Dialog); mContext = context; getWindow() .setType(WindowManager .LayoutParams.TYPE_STATUS_BAR_PANEL); getWindow() .addFlags(WindowManager .LayoutParams.FLAG_ALT_FOCUSABLE_IM | WindowManager .LayoutParams .FLAG_SHOW_WHEN_LOCKED); WindowManager .LayoutParams attrs = getWindow().getAttributes(); attrs.setTitle(getClass().getSimpleName()); getWindow().setAttributes(attrs); }
之后用getWindow 获取当前的Window并且设定它的Type 并且添加了一些flag,之后将SystemUIDialog类名加入Window的attrs中.其实并不清楚具体为什么要这么做只是这么做确实可以将AlertDialog的绑定问题搞定
- SystemUIDialog 小结
- SystemUIDialog 小结
- 小结!
- 小结
- 小结
- 小结
- 小结
- 小结
- 小结
- 小结
- 小结
- 小结
- 小结
- 小结
- 小结
- 小结
- 小结
- 小结
- 10005---CSS语法
- leetcode:9 Palindrome Number-每日编程第二十八题
- 【Caffe实践】基于Caffe的人脸检测实现
- 基本语法元字符
- 修改MFC标题栏上的图标和修改MFC窗口标题
- SystemUIDialog 小结
- 读书笔记 -- 011_数据挖掘_频繁模式_关联性_相关性_1
- 内存分析工具 MAT 的使用
- 使用Spring框架实现文件上传
- 线程的同步和协调
- 斐波那契数列算法分析
- 使用匿名方法 委托
- Java NIO使用及原理分析(三)
- swift学习日记(七)下标 继承