全局的dialog

来源:互联网 发布:积分商城java设计 编辑:程序博客网 时间:2024/06/07 15:09

以前一直觉得只有在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
原创粉丝点击