加上它,用户就不会焦虑了?

简介: 加上它,用户就不会焦虑了?

最近呢一直进行Android项目的开发。开发过程中发现,以前的好多知识点都想不起来了,都得先去Google一下,进展缓慢,耗时又耗力,所以决定将开发中的知识点慢慢总结下来,以便日后查验。大家在进行网络请求数据的时候(尤其是第一次),是不是也会遇到数据量较大,请求时间较长的情况呢?在这中情况下,如果一味的让用户默默的等待,不给用户以提示信息,用户很可能就会产生厌烦的情绪,影响用户体验。今天呢,阿Q就给大家讲一下项目中用到的加载框吧!

首先呢,先讲一下阿Q最先想到的ProgressDialog的用法吧,查阅Android API发现,此类在API 26中已经被弃用了。它给出了这样的解释:ProgressDialog是一个模拟对话框,可防止用户与应用程序进行交互。您应该使用类似的进度指示器ProgressBar,而不是使用此类,可以将其嵌入到应用程序的UI中。或者,您可以使用通知来通知用户任务的进度。虽然它已经被无情抛弃了,但是阿Q呢还是想研究一下它的用法,只当是积累知识了。ProgressDialog继承自AlertDialog,而AlertDialog继承自DialogProgressDialog的使用方法有两种,一种是直接New ProgressDialog,一种是调用ProgressDialog的静态方法show。接下来就让代码说话吧。

第一种方式

final ProgressDialog pd = new ProgressDialog(MainActivity.this);
//设置标题
pd.setTitle("我是加载框");
//设置提示信息
pd.setMessage("正在加载...");
//设置ProgressDialog 是否可以按返回键取消;
pd.setCancelable(true);
pd.setCanceledOnTouchOutside(false);// 设置在点击Dialog外是否取消Dialog进度条
//显示ProgressDialog
pd.show();
//模拟请求数据
handler.postDelayed(new Runnable() {
   @Override
   public void run() {
       //删除progressdialog,cancel与dismiss作用相同。加载完成取消dialog
       pd.cancel();
  }
},2000);

其他的常用方法:

//设置进度条风格,STYLE_HORIZONTAL为水平的,默认为STYLE_SPINNER,
setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
//设置标题图标:
setIcon(R.drawable.ic_launcher);
//设置ProgressDialog 的进度条是否不明确;这个属性对于ProgressDailog默认的转轮模式没有实际意义, 默认下设置为true,它仅仅对带有ProgressBar的Dialog有作用。修改这个属性为false后可以实时更新进度条的进度。
setIndeterminate(boolean flag):
//当前Dialog强制取消之后将会被执行,通常用来清理未完成的任务。
setOnCancelListener()
//设置ProgressDialog 的一个Button(需要监听Button事件);
setButton()
//设置最大进度条的值
setMax(int)、getMax()
//更新进度条,当然一般都需要Handler的结合来更新进度条
setProgress(int)、getProgress
//增加进度条
incrementProgressBy(int)
//设置progress发生变化时的进度指示条的背景图
setProgressDrawable()

第二种方式:

final ProgressDialog pd2 = ProgressDialog.show(MainActivity.this,"刷新","刷新中...");
//模拟请求数据
handler.postDelayed(new Runnable() {
   @Override
   public void run() {
       //加载完成取消dialog
       pd2.dismiss();
  }
},2000);

show方法参数讲解:

show(Context context, CharSequence title, CharSequence message, boolean indeterminate, boolean cancelable, OnCancelListener cancelListener);
context:上下文;
title:加载框标题
message:加载框提示信息
indeterminate:是否处于不确定模式
cancelable:是否可以按返回键取消
cancelListener:监听进度条被取消的操作

接下来呢,阿Q就给大家制作一个自定义的Dialog,直接上代码

//1,创建LoadingDialog继承Dialog并实现构造方法
public class LoadingDialog extends Dialog{
   public LoadingDialog(@NonNull Context context) {
       super(context);
  }
   public LoadingDialog(@NonNull Context context, int themeResId) {
       super(context, themeResId);
  }
   protected LoadingDialog(@NonNull Context context, boolean cancelable, @Nullable OnCancelListener cancelListener) {
       super(context, cancelable, cancelListener);
  }
   //2,创建静态内部类Builder,将dialog的部分属性封装进该类
   public static class Builder{
       private Context context;
       //提示信息
       private String message;
       //是否展示提示信息
       private boolean isShowMessage=true;
       //是否按返回键取消
       private boolean isCancelable=true;
       //是否取消
       private boolean isCancelOutside=false;
       public Builder(Context context) {
           this.context = context;
      }
       /**
        * 设置提示信息
        * @param message
        * @return
        */
       public Builder setMessage(String message){
           this.message=message;
           return this;
      }
       /**
        * 设置是否显示提示信息
        * @param isShowMessage
        * @return
        */
       public Builder setShowMessage(boolean isShowMessage){
           this.isShowMessage=isShowMessage;
           return this;
      }
       /**
        * 设置是否可以按返回键取消
        * @param isCancelable
        * @return
        */
       public Builder setCancelable(boolean isCancelable){
           this.isCancelable=isCancelable;
           return this;
      }
       /**
        * 设置是否可以取消
        * @param isCancelOutside
        * @return
        */
       public Builder setCancelOutside(boolean isCancelOutside){
           this.isCancelOutside=isCancelOutside;
           return this;
      }
       //创建Dialog
       public LoadingDialog create(){
           LayoutInflater inflater = LayoutInflater.from(context);
           View view=inflater.inflate(R.layout.dialog_loading,null);
           //设置带自定义主题的dialog
           LoadingDialog loadingDailog=new LoadingDialog(context,R.style.MyDialogStyle);
           TextView msgText= (TextView) view.findViewById(R.id.tipTextView);
           if(isShowMessage){
               msgText.setText(message);
          }else{
               msgText.setVisibility(View.GONE);
          }
           loadingDailog.setContentView(view);
           loadingDailog.setCancelable(isCancelable);
           loadingDailog.setCanceledOnTouchOutside(isCancelOutside);
           return loadingDailog;
      }
  }
}

客户端代码:

LoadingDialog.Builder builder=new LoadingDialog.Builder(MainActivity.this)
  .setMessage("加载中...")
  .setCancelable(false);
final LoadingDialog dialog=builder.create();
dialog.show();
handler.postDelayed(new Runnable() {
   @Override
   public void run() {
       dialog.dismiss();
  }
},2000);

接下来呢就给大家附上手机效果展示图:

image.gif1.gif


相关文章
|
3天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
271 116
|
18天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
12天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
663 219
|
5天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
353 34
Meta SAM3开源:让图像分割,听懂你的话
|
10天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1588 157
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
897 61
|
7天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
295 140