全局的dialog

以前一直觉得只有在activity中才可以弹dialog,最近项目需要一个不局限与某一个activity的dialog,通过查阅资料网上对于这种全局的dialog大致有三种方案


1、系统弹出dialog,样式不怎么漂亮但我觉得可以自定义的应该。


2、 设置setType()属性为WindowManager.LayoutParams,TYPE.SYSTEM/ALERT;觉得这个方法和第一种类似。


3、创建一个透明的activity ,让dialog依赖于这个activity,我个人不怎么喜欢这种方案。


最后我选择的第二种

我的dialog,要在收到推送时在Receiver里面处理弹还是不弹

1、 在清单文件中加权限

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
2、在dialog show()之前调用设置type的方法
 AlertDialog alert = builder.create();
        alert.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
        alert.show();


我定义了两个按钮,取消和确定,当点击确定的时候跳转到指定的activity


确定按钮的点击事件后进行的跳转代码如下:
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                       Intent intent=new Intent(context,MainActivity.class);
context.startActivity(intent);
dilog.dismiss()                    }
                });

context上下文对象是Receiver中接收到的,这时候我运行程序,发现dialog如我所愿不受activity控制可以自由弹出了,但是当我点击确定按钮时,出现了错误

 Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?




我发现是上下文对象需要一个名为FLAG_ACTIVITY_NEW_TASK 的flag,于是在启动activity前我添加了如下代码

intent.addFlags(FLAG_ACTIVITY_NEW_TASK);

这样就可以完美实现dialog无法无天的弹了O(∩_∩)O哈哈哈~~~~~~


对于这个知识点我只是总结了一下前辈们的方法和自己实际操作时遇到的问题,请大家多多指教哦!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值