android 全局dialog,并且兼容android8.0 系统。
<!-- 浮动通知权限 --> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
初始化dialog
public static void showLogoutDialog(final Context context) { AlertDialog.Builder builder = new AlertDialog.Builder(context); /*true 代表点击空白可消失 false代表点击空白哦不可消失 */ builder.setCancelable(false); View view = View.inflate(context, R.layout.dialog_logout, null); TextView tvOk = view.findViewById(R.id.id_logout_tv_ok); TextView tvCancel = view.findViewById(R.id.id_logout_tv_cancel); builder.setView(view); final AlertDialog dialog = builder.create(); //设置弹出全局对话框,但是这句话并不能解决在android的其他手机上能弹出来(例如用户华为p10 就无法弹框) // dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST); //只有这样才能弹框 if (Build.VERSION.SDK_INT>=26) {//8.0新特性 dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY); }else{ dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); } tvOk.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); tvCancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); dialog.show(); }
调用dialog
showLogoutDialog(mContext);
这样就能简单的把一个dialog 全局显示出了,然而如果你的dialog 界面是有很多逻辑的,例如新年卡片等推送的界面
这种情况是在下面这句设置 style,
AlertDialog.Builder builder = new AlertDialog.Builder(context,R.style.Dialog);
这是因为AlertDialog 是很难设置 style,看到这里是不是很扎心了,老铁
我也是很扎心,我也是查了很多资料,也下载很多次其他人的demo,说实话效果不咋地却花了不少的下载资源,后来就放弃了,过了一天想了一些,结合以前做过的demo,于是乎放弃了 AlertDialog.
花了不少时间才做成下面的效果,不容易啊
上面的效果是是 启动service + 定时器 + 广播,显示的效果
下载连接地址:
https://download.csdn.net/download/u014133383/10364495