您的位置:

Android进度条控件详解及应用

一、ProgressBar控件介绍

ProgressBar是Android中常用的控件之一,用于展示进度,可以是不确定的进度条(即循环旋转),也可以是确定的进度条(即显示百分比)。它可以用在下载、安装、上传等场景下,可以提供进度反馈,提高用户体验。

ProgressBar控件可以通过android:indeterminate属性控制其类型,true表示不确定进度,false表示确定进度(有进度值和进度条)。

下面是ProgressBar的使用示例,其中indeterminate属性设置为"true",表示不确定进度:

    <ProgressBar
        android:id="@+id/progressBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:indeterminate="true" />

如果设置indeterminate属性为"false",则ProgressBar就是确定进度条,下面是一个带有百分比文字显示的示例:

    <ProgressBar
        android:id="@+id/progressBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:progressDrawable="@drawable/progress_bar"
        android:indeterminate="false"
        style="?android:attr/progressBarStyleHorizontal" />
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

其中,progressDrawable属性指定了一个Drawable资源,用来定义进度条的样式。progressBarStyleHorizontal属性继承自android:progressBarStyle,表示水平方向的进度条样式。

二、自定义ProgressBar的样式

ProgressBar的默认样式可能与应用的UI风格不匹配,可以通过自定义样式来实现与应用的统一风格。

自定义ProgressBar样式,需要使用到progressDrawable资源,它可以是一个层级Drawable或者一个XML文件。层级Drawable是一组Drawable通过layer-list标签组合在一起,可以实现层次的效果,XML文件则可以使用不同的标签来定义颜色、大小和形状等属性。

下面是一个自定义进度条样式的示例,使用的是layer-list标签实现:

    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <shape
                android:shape="rectangle">
                <stroke
                    android:width="1dp"
                    android:color="#000000" />
                </shape>
        </item>
        <item
            android:id="@android:id/progress">
            <clip>
                <shape
                    android:shape="rectangle">
                    <solid android:color="#0000ff" />
                </shape>
            </clip>
        </item>
    </layer-list>

以上的代码定义了一个矩形进度条,进度条包括两个部分:边框和进度条。其中item标签是用来定义Drawable的,第一个item定义了矩形的边框,stroke属性用来控制边框的宽度和颜色,第二个item则是通过clip标签剪切了矩形形状,然后填充了指定颜色的矩形,进而形成了一个进度条。

三、ProgressBar控件的常见应用场景

1、下载进度条

在App中,下载是一个常见的操作,需要展现下载进度。可以使用ProgressBar控件来展示下载情况,一般情况下需要实现"进度显示"和"进度更新"两个功能。

    // 在onCreate()方法中,初始化ProgressDialog控件并设置样式
    mProgressDialog = new ProgressDialog(MainActivity.this);
    mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    mProgressDialog.setCancelable(false);
    mProgressDialog.show();

    // 模拟下载任务
    new Thread(new Runnable() {
        @Override
        public void run() {
            for(int progress = 0; progress <= 100; progress++) {
                try {
                    Thread.sleep(50);
                    Message msg = mHandler.obtainMessage();
                    msg.obj = progress;
                    mHandler.sendMessage(msg);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            mProgressDialog.dismiss();
        }
    }).start();

    // 在主线程中更新进度条的进度
    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            int progress = (int) msg.obj;
            mProgressDialog.setProgress(progress);
        }
    };

以上代码中,ProgressDialog是ProgressBar的一个子类,它默认提供一个带有“进度”、“最大值”和“最小值”的滑动进度条。通过调用setProgressStyle()方法可以设置进度条的类型;setCancelable()方法可以设置点击进度条外部是否取消进度条的操作;show()方法用于显示进度条;dismiss()方法用于隐藏进度条。

2、加载进度条

加载进度条是一种特殊的ProgressBar,一般用来展示应用正在加载数据或者从网络上获取数据时,显示等待时间。

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <ProgressBar
            android:id="@+id/progressBar"
            android:layout_centerInParent="true"
            android:indeterminateDrawable="@drawable/progress_dialog"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView
            android:id="@+id/tv_loading_text"
            android:text="加载中..."
            android:textSize="20sp"
            android:layout_centerHorizontal="true"
            android:layout_below="@+id/progressBar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </RelativeLayout>

在以上代码中,ProgressBar的indeterminateDrawable属性指定了一个progress_dialog.xml文件作为加载进度条的样式,该XML文件可以使用layer-list标签定制特殊的样式。TextView用于展示加载进度条下方的文字。

3、上传进度条

与下载进度条类似,上传进度条也需要实现"进度显示"和"进度更新"两个功能。由于进度显示上有一些差异,上传进度条可以在附加一个进度动画特效,以提高用户体验。

    // 定义带有进度特效的Drawable样式,保存为R.drawable.upload_progress_anim
    <animation-list xmlns:android="http://schemas.android.com/apk/res/android"
        android:oneshot="false">
        <item android:drawable="@drawable/upload_progress_1" android:duration="60" />
        <item android:drawable="@drawable/upload_progress_2" android:duration="60" />
        <item android:drawable="@drawable/upload_progress_3" android:duration="60" />
        <item android:drawable="@drawable/upload_progress_4" android:duration="60" />
        <item android:drawable="@drawable/upload_progress_5" android:duration="60" />
        <item android:drawable="@drawable/upload_progress_6" android:duration="60" />
        <item android:drawable="@drawable/upload_progress_7" android:duration="60" />
        <item android:drawable="@drawable/upload_progress_8" android:duration="60" />
    </animation-list>

    // 初始化ProgressBar控件并设置样式
    mProgressBar.setIndeterminateDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.upload_progress_anim));

    // 模拟上传任务
    new Thread(new Runnable() {
        @Override
        public void run() {
            for(int progress = 0; progress <= 100; progress++) {
                try {
                    Thread.sleep(50);
                    Message msg = mHandler.obtainMessage();
                    msg.obj = progress;
                    mHandler.sendMessage(msg);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            mProgressBar.setIndeterminate(false);
        }
    }).start();

    // 在主线程中更新进度条的进度
    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            int progress = (int) msg.obj;
            mProgressBar.setProgress(progress);
        }
    };

在以上代码中,ProgressBar的indeterminateDrawable属性设置了加载进度条的样式,该样式使用animation-list标签定义了一个带有进度效果的Drawable资源。checkAnim属性控制该Drawable循环播放,直到进度完成;在上传任务结束时,将indeterminate属性设置为false可以结束进度的播放。

总结

本文详细讲解了Android中的ProgressBar控件,介绍了ProgressBar的分类、自定义样式和实际应用场景。要点包括:ProgressBar的使用方法、属性和样式;ProgressBar在下载、加载、上传三个场景中的应用方法。读完本文,相信你已经掌握了ProgressBar的使用方法,可以在实际开发中熟练使用该控件了。

Android进度条控件详解及应用

2023-05-20
Android进度条控件的完整实现教程

2023-05-21
如何快速改进Android应用的进度条

2023-05-16
印象笔记记录java学习(Java成长笔记)

2022-11-12
提高用户体验的Android进度条控件

Android进度条控件是Android中一种重要的用于提示用户当前操作正在进行的控件。它可以提高用户体验,让用户清楚地知道当前操作的进度。本文将介绍如何使用Android Studio实现一个可见性

2023-12-08
数据库的笔记mysql,数据库管理系统笔记

2022-11-24
Android自定义View实现圆形进度条

2023-05-14
Android进度条:显示加载进度和提升用户体验

在Android应用中,进度条是一种重要的UI组件。进度条可以用来展示长时间的操作进度,如下载文件或者加载数据。同时,进度条也可以用来提升用户体验,让用户感受到应用正在运作,从而减少用户的等待焦虑感。

2023-12-08
Android进度条详解

2023-05-20
java学习笔记(java初学笔记)

2022-11-14
发篇java复习笔记(java课程笔记)

2022-11-09
java客户端学习笔记(java开发笔记)

2022-11-14
java方法整理笔记(java总结)

2022-11-08
Cherrytree笔记应用

2023-05-21
Mac笔记:在日常生活中高效实用的笔记工具

2023-05-18
Android ListView控件详解

2023-05-18
重学java笔记,java笔记总结

2022-11-23
java包笔记,Java语言包

2022-11-18
java笔记,大学java笔记

2022-11-28
5000元笔记本电脑

随着科技的不断发展,笔记本电脑已经成为了现代人生活中必不可少的工具。 随着科技的不断发展,笔记本电脑已经成为人们生活中必不可少的工具。在如今数字化时代的到来,人们对信息的需求也越来越高了,而笔记本作为

2023-12-08