ProgressDialog 是安卓开发中极为普遍的一个 UI 控件,常常用于在后台线程执行时显示一个进度条,以提示用户等待任务执行的进度和状态。而 Material Design 给出了一套更新的 UI 设计规范,其中也对 ProgressDialog 进行了一定的改进和优化。
本文将介绍在 Material Design 中使用 ProgressDialog 的方法,包括如何自定义样式、设置进度条和取消对话框等操作。
1. 基本用法
ProgressDialog 是一个以对话框形式出现的 UI 控件,在安卓中是一个预设好的控件,通过调用其构造函数来创建一个 ProgressDialog 对象。
ProgressDialog progressDialog = new ProgressDialog(context);
在创建 ProgressDialog 对象后,可以对其进行一系列属性设置,包括对话框标题、消息内容、进度样式、进度最大值、进度当前值等等。例如下面是一个设置进度最大值为 100、进度样式为水平进度条的 ProgressDialog 对象。
ProgressDialog progressDialog = new ProgressDialog(context); progressDialog.setTitle("正在下载"); progressDialog.setMessage("请稍等..."); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setMax(100);
接下来在后台线程中执行任务,一旦任务完成就隐藏 ProgressDialog 对话框。
-- -------------------- ---- ------- ---------------------- --- ---------- ---------- - --------- ------ ---- ----- - -- ---- --- ---- - - -- - -- ---- ---- - ------------------------------ --- - ----------------- - ----- --------------------- -- - -------------------- - - ------------------------- - -----------展开代码
注意,这里需要使用 handler 将 UI 操作放到主线程执行,否则会抛出 android.view.ViewRootImpl$CalledFromWrongThreadException
异常。
final Handler handler = new Handler(); handler.post(new Runnable() { @Override public void run() { progressDialog.show(); } });
2. 自定义样式
Material Design 中 ProgressDialog 提供了一些自定义样式,可以通过 setIndeterminateDrawable()
和 setProgressDrawable()
方法对进度样式进行自定义。例如下面是一个圆形进度条的自定义样式。
ProgressDialog progressDialog = new ProgressDialog(context); progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); progressDialog.setMessage("请稍等..."); progressDialog.setIndeterminateDrawable(ContextCompat.getDrawable(context, R.drawable.custom_progress_dialog_circular));
其中 R.drawable.custom_progress_dialog_circular
是在 res/drawable 目录下定义的一个 XML Drawable 文件,其内容如下。
-- -------------------- ---- ------- ----- ------------- ------------------ ------- ---------------------------------------------------------- ----------------------- -------------------- -------------------- ----------------------- - ------ ---------------------------- -------------------- -------------------------- ------------------------ ----- --------------------- -------------------- -- --------- -------------------------------------------------- ----------------------------------------------- ------------------------------------------------- -------------------- ------------------------ -- -------- ---------展开代码
通过设置不同的 XML 绘制文件,可以实现更多自定义样式。
3. 取消对话框
在 ProgressDialog 显示的同时,利用 setCancelable()
方法,可以使用户在点击其它区域或按下返回键时取消对话框。
ProgressDialog progressDialog = new ProgressDialog(context); progressDialog.setCancelable(true);
同时,也可以设置进度条最大时间,例如在 10 秒内完成任务,否则自动取消对话框。
-- -------------------- ---- ------- ----------------------------------- --------------------------- --- --------------------- ----- - --------- ------ ---- ----------- -------------------- - -------------------------------- -------------------- - ------ - --------- ------ ---- ---------- - -- ---------------------------- - ------------------------- - - ----------展开代码
结语
ProgressDialog 是一个非常常用的 UI 工具,特别是在后台线程执行任务时,可以帮助用户更好地了解任务执行的状态和进度。而 Material Design 中对 ProgressDialog 的改进和优化,也使其更好地符合现代用户的审美和使用习惯。在实际开发中,根据项目需要选择合适的样式和配置,可以使 ProgressDialog 功能更加强大、适用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67c01f21314edc268463ed75