How to add progress bar over dialog
Solution 1
Try something like this, it should work globally :
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, ContextCompat.getColor(activity, 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", "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);
}
}
Solution 2
Android has a ProgressDialog with AlertDialog as base class, and adds a progress functionality:
ProgressDialog progress = new ProgressDialog(this);
progress.setMessage("Downloading Music");
progress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progress.setIndeterminate(true);
progress.setProgress(0);
progress.show();
and increment:
progress.setProgress( ... );
Check here for more.
Solution 3
Try to use dialog fragment for your dialog and inflate progress bar inside the layout of dialog fragment.For more info check this link.
https://developer.android.com/reference/android/app/DialogFragment.html
Solution 4
Try this
ProgressDialog dialog = ProgressDialog.show(MyActivity.this, "",
"Loading. Please wait...", true);
This will give you a progress bar which can be used as per your requirement.
Solution 5
If you are using custom design layout for your dialog then, you can put your progress bar inside your progress dialogs custom layout and use it from there. Then it will get displayed above ur dialog when ur dialog gets displayed.
Related videos on Youtube
Harish Gyanani
I have been repeatedly recognized for my passion, presentation skills, teaching methods, Logical & analytical skills, scalable solutions, automation tools & plug-ins, UI design patterns and quality code.
Updated on October 27, 2022Comments
-
Harish Gyanani over 1 year
Whenever I want to show progress bar into my app, I call this method and this method adds ProgressBar into my layout.
Problem : I want to show this progress bar over Dialog, but Dialog is always shown above. What can be done for this situation?
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); } }
-
Harish Gyanani over 6 yearsPlease comment, why vote down?
-
Jitesh Mohite over 6 yearswhy you need to add over it ? You can show one and dismiss other. vise versa
-
Sarthak Mittal over 6 years@jiteshmohite i think it is a valid requirement.
-
-
Harish Gyanani over 6 yearsThis is not progress bar, it is progress dialog.
-
Dave Hubbard over 6 yearsNote that this uses a ProgressDialog, which was just deprecated in API 26.
-
Aritz over 6 yearsProgressDialog has now been deprecated since API 26