SystemUIDialog 小结

 有时我们为android系统SystemUI部分添加功能的时候,需要弹出一个Dialog来通知户,但是SystenUI中的大部分类虽然提供了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_BA

R_PANEL);        

        getWindow().addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCU

SABLE_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的绑定问题搞定

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值