每当我想在我的应用程序中显示进度条时,我调用此方法,此方法将ProgressBar添加到我的布局中.
问题:我想在Dialog上显示此进度条,但Dialog始终显示在上面.这种情况可以做些什么?
public static void showProgressBar(@NonNull final Activity activity) { try { if (activity == null) { LogManager.printStackTrace(new NullActivityException()); return; } View view = activity.findViewById(android.R.id.content); if (view == null) { LogManager.printStackTrace(new NullPointerException("content view is null")); return; } View rootView = activity.findViewById(android.R.id.content).getRootView(); if (rootView == null || !(rootView instanceof ViewGroup)) { LogManager.printStackTrace(new NullPointerException("rootView is null or not an instance of ViewGroup")); return; } final ViewGroup layout = (ViewGroup) rootView; final ProgressBar progressBar = new ProgressBar(activity); progressBar.setIndeterminate(true); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { Drawable wrapDrawable = DrawableCompat.wrap(progressBar.getIndeterminateDrawable()); DrawableCompat.setTint(wrapDrawable,ContextCompat.getColor(activity,R.color.colorAccent)); progressBar.setIndeterminateDrawable(DrawableCompat.unwrap(wrapDrawable)); } RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,RelativeLayout.LayoutParams.MATCH_PARENT); final RelativeLayout rl = new RelativeLayout(activity); rl.setBackgroundColor(ActivityCompat.getColor(activity,R.color.tc_hint_grey_alpha)); rl.setClickable(true); rl.setTag("#$UniqueProgressBar"); ViewGroup.LayoutParams params2 = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,120); rl.setGravity(Gravity.CENTER); rl.addView(progressBar,params2); LogManager.i("ProgressBar","ProgressUtils.showProgressBar->called"); layout.addView(rl,params); mRunnable = new Runnable() { @Override public void run() { LogManager.i("ProgressBar","ProgressUtils.showProgressBar->120 secs timeout"); hideProgressBar(activity); } }; mHandler = new Handler(); mHandler.postDelayed(mRunnable,120000); LogManager.i("ProgressBar","Added"); } catch (Exception e) { LogManager.printStackTrace(e); } }
解决方法
尝试这样的东西,它应该全局工作:
public static void showProgressBar(@NonNull final Activity activity) { try { if (activity == null) { LogManager.printStackTrace(new NullActivityException()); return; } final WindowManager wm = (WindowManager) activity.getApplicationContext().getSystemService(Activity.WINDOW_SERVICE); final ProgressBar progressBar = new ProgressBar(activity); progressBar.setIndeterminate(true); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { Drawable wrapDrawable = DrawableCompat.wrap(progressBar.getIndeterminateDrawable()); DrawableCompat.setTint(wrapDrawable,R.color.colorAccent)); progressBar.setIndeterminateDrawable(DrawableCompat.unwrap(wrapDrawable)); } WindowManager.LayoutParams windowLayoutParams = new WindowManager.LayoutParams(); windowLayoutParams.gravity = Gravity.CENTER; windowLayoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_PANEL; windowLayoutParams.token = activity.getWindow().getDecorView().getWindowToken(); windowLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; windowLayoutParams.height = LayoutParams.MATCH_PARENT; windowLayoutParams.width = LayoutParams.MATCH_PARENT; wm.addView(progressBar,windowLayoutParams); LogManager.i("ProgressBar","Added"); } catch (Exception e) { LogManager.printStackTrace(e); } }