【Android开发】高级组件-进度条

简介:
当一个应用在后台执行时,前台界面不会有任何信息,这是用户根本不知道程序是否在执行以及执行进度等,因此需要使用进度条来提示程序执行的进度。在Android中,进度条(ProgressBar)用于向用户显示某个耗时操作完成的百分比。

在屏幕中添加进度天,可以在XML布局文件中通过<ProgressBar>标记添加,基本语法格式如下:
<ProgressBar 
   属性列表 
>
</ProgressBar>

ProgressBar组件支持的XML属性如下所示:
android:max   用于设置进度条的最大值
android:progress  用于指定进度条已完成的进度值
android:progressDrawable  用于设置进度条轨道的绘制形式

除了上表介绍的属性外,进度条还提供了下面两个常用的方法用于操作进度:
setProgress(int progress)方法,用于设置进度完成的百分比
incrementProgressBy(int diff)方法:用于设置进度条的进度增加或减少。当参数为正数时,表示进度增加;为负数时,表示进度减少。

Progress的style属性的可选值:
?android:attr/progressBarStyleHorizontal  细水平长条进度条
?android:attr/progressBarStyleLarge  大圆形进度条
?android:attr/progressBarStyleSmall  小圆形进度条
@android:style/Widget.ProgressBar.Large  大跳跃、旋转画面的进度条
@android:style/Widget.ProgressBar.Small  小跳跃、旋转画面的进度条
@android:style/Widget.ProgressBar.Horizontal  粗水平长条进度条

接下来一个小实例来实现水平进度条和圆形进度条:

实现效果如图:


实现方法:
res/layout/main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	android:orientation="horizontal"
	android:background="#000000">
	<ProgressBar android:id="@+id/progressBar1"
	    android:layout_width="match_parent"
	    android:layout_height="wrap_content"
	    android:max="100"
	    style="@android:style/Widget.ProgressBar.Horizontal"/>
	<ProgressBar android:id="+@id/progressBar2"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    style="?android:attr/progressBarStyleLarge"/>
</LinearLayout>


MainActivity:
package com.example.test;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.Toast;


public class MainActivity extends Activity {
	private ProgressBar horizonP;//水平进度条
	private ProgressBar circleP;//圆形进度条
	private int mProgressStatus=0;//完成进度
	private Handler mHandler;//声明一个用于处理消息的Handler类的对象
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		horizonP=(ProgressBar)findViewById(R.id.progressBar1);//获取水平进度条
		circleP=(ProgressBar)findViewById(R.id.progressBar2);//获取圆形进度条
		/*通过匿名内部类实例化处理消息的Handler类的对象,并重写其handleMessage()方法,
		 * 实现当耗时操作没有完成时更新进度,否则设置进度条不显示*/
		mHandler=new Handler(){
			@Override
			public void handleMessage(Message msg) {
				if(msg.what==0x111){
					horizonP.setProgress(mProgressStatus);//更新进度
				}else{
					Toast.makeText(MainActivity.this, "耗时操作已经完成", Toast.LENGTH_SHORT).show();
					horizonP.setVisibility(View.GONE);//设置进度条不显示并且不占用空间
					circleP.setVisibility(View.GONE);
				}
				super.handleMessage(msg);
			}
		};
		
		//开启一个线程,用于模拟一个耗时操作。在该线程中,调用sendMessage()发送处理消息
		new Thread(new Runnable(){


			@Override
			public void run() {
				while(true){
					mProgressStatus=doWork();//获取耗时操作完成的百分比
					Message m=new Message();
					if(mProgressStatus<100){
						m.what=0x111;
						mHandler.sendMessage(m);//发送消息
					}else{
						m.what=0x110;
						mHandler.sendMessage(m);//发送消息
						break;
					}
				}
				
			}
			//模拟一个耗时操作
			private int doWork() {
				mProgressStatus+=Math.random()*10;//改变完成进度
				try{
					Thread.sleep(200);//线程休眠200毫秒
				}catch(InterruptedException e){
					e.printStackTrace();
				}
				return mProgressStatus;//返回新的进度
			}
			
		}).start();//开启一个线程
	}
}
转载请注明出处:http://blog.csdn.net/acmman/article/details/44886795
相关文章
|
10月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1754 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
10月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1125 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
10月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1202 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
11月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
935 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
10月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
443 0
|
11月前
|
Java 开发工具 Maven
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
1391 6
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
5952 77
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
717 11
|
移动开发 Java 编译器
Kotlin与Jetpack Compose:Android开发生态的演进与架构思考
本文从资深Android工程师视角深入分析Kotlin与Jetpack Compose在Android系统中的技术定位。Kotlin通过空安全、协程等特性解决了Java在移动开发中的痛点,成为Android官方首选语言。Jetpack Compose则引入声明式UI范式,通过重组机制实现高效UI更新。两者结合不仅提升开发效率,更为跨平台战略和现代架构模式提供技术基础,代表了Android开发生态的根本性演进。
562 0
|
安全 Java Android开发
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
517 0
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡

热门文章

最新文章