android 全局dialog,并且兼容android8.0

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







评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值