Android 实现全局dialog

需求

最近项目需要实现这样一个需求,当外来数据进行注册时,需要提示progressDialog,而外来数据是在子线程中,需要handler加持,这样的话就需要很多handler的code,所以我打算在Application中去实现这样一个功能。

原理

ProgressDialog 显示需要非ApplicationContext的上下文来依附,所以我们不能使用getApplicitionContext方法来实现。

去网上查了很多教程最终还是选择了创建Activity这种方式,因为系统弹窗的方式需要权限,而这个权限在高版本又需要手动处理,舍弃

  1. 创建一个透明的Activity主题
 <!-- 全局弹框Activity,设置背景颜色为透明   -->
    <style name="Transparent" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowAnimationStyle">@android:style/Animation</item>
        <item name="android:windowNoTitle">true</item>
    </style>
  1. 创建一个Activity
  materialDialog = new MaterialDialog.Builder(this)
                .title("Progress")
                .content("Please Wait...")
                .progress(true, 0)
                .progressIndeterminateStyle(true)
                .canceledOnTouchOutside(false)
                .show();

        while (true)
        {
        	//这个xxx是Application类中的一个静态变量,用来标志是否关闭dialog
            if(!MyApplication.xxx)
            {
                materialDialog.dismiss();
                finish();
                Log.i(TAG, "ondo: maaa123");
            }

        }
  1. 在application中使用handler
 /**
     *  传递消息的handler
     */
    private static class  MyHandler  extends Handler
    {
        @Override
        public void handleMessage(Message msg) {

            switch(msg.what)
            {
                case 0:
					//进入一个刚才新建的activity
                    Intent intent = new Intent(getContext(),GlobalDialogActivity.class);
                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    getContext().startActivity(intent);
                    break;
                case 1:
                    break;
                case 2:
                    break;
                default:
                    break;
            }
        }

    }
    private static MyHandler myHandler = new MyHandler();
发布了266 篇原创文章 · 获赞 133 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/weixin_43889841/article/details/104791184