Android 弹出进度条对话框 避免用户点击界面交互

下面给出最常用、最简洁的 Java 实现方式: ProgressDialog(已废弃但仍可用)和 ProgressBar + 透明不可取消 Dialog(推荐,兼容性好,可定制)。 两种写法都 强制屏蔽用户点击(setCancelable(false) + setCanceledOnTouchOutside(false)),避免界面交互。
一、ProgressDialog(一行代码即可,已废弃但简单)private ProgressDialog progressDialog;
private void showLoading_PD() {if (progressDialog == null) {progressDialog = new ProgressDialog(this); // this = ActivityprogressDialog.setMessage("加载中…");progressDialog.setIndeterminate(true);progressDialog.setCancelable(false); // 屏蔽返回键 progressDialog.setCanceledOnTouchOutside(false); // 屏蔽外部点击}progressDialog.show();}
private void dismissLoading_PD() {if (progressDialog != null && progressDialog.isShowing()) {progressDialog.dismiss();}}
二、官方推荐:自定义 Dialog(通用,不废弃)先写个极简布局 dialog_loading.xml(放根目录 res/layout/):<?xml version="1.0" encoding="utf-8""><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"android:padding="24dp"android:gravity="center_vertical">
</LinearLayout>Java 代码:public class LoadingDialog {
}在 Activity / Fragment 中使用:LoadingDialog loading = new LoadingDialog(this); // this = Activityloading.show();// ...耗时操作...loading.dismiss();
三、几点注意两种写法都 必须在主线程(UI 线程)中 show()/dismiss()。如果放在 AsyncTask/Thread 里,用 runOnUiThread() 或 Handler(Looper.getMainLooper())。若使用 DialogFragment 同理,只要 setCancelable(false) 即可。Android O 以后官方推荐用 ProgressBar + Dialog/DialogFragment,ProgressDialog 虽仍能用,但随时可能被彻底移除,建议新项目用第二种方案。复制即可运行,屏蔽一切用户点击事件。







评论