ProgressBar的常用属性

style(进度条的样式,默认为圆形;用style="?android:attr/progressBarStyleHorizontal"可以将进度条设为条状)

android:progress(进度条当前所处进度)

android:max(进度条总进度)

用线程实现进度条的注意事项

不能在主线程中执行耗时的操作,只能在子线程中操作;另外,在子线程中不能操作主线程中的控件(ProgressBar除外)

错误示例(在子线程中操作主线程中的TextView)

activity_main.xml里的代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><FrameLayoutandroid:layout_width="match_parent"android:layout_height="60dp"><TextViewandroid:layout_width="80dp"android:textColor="@color/red"android:id="@+id/tv_main_desc"android:textSize="30dp"android:layout_height="match_parent" /><ProgressBarandroid:layout_width="match_parent"style="?android:attr/progressBarStyleHorizontal"android:id="@+id/pb_main_download"android:max="100"android:layout_height="match_parent" /></FrameLayout><Buttonandroid:layout_width="match_parent"android:text="Download"android:onClick="download"android:layout_height="wrap_content" /></LinearLayout>

MainActivity.java里的代码如下:

public class MainActivity extends AppCompatActivity {private int p=0;//当前进度private ProgressBar pb_main_download;//进度条private TextView tv_main_desc;//显示文本的控件@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//根据ID找到进度条pb_main_download=findViewById(R.id.pb_main_download);}//点击Download按钮所调用的方法public void download(View view) {if(0==p){//如果当前进度为0new myThread().start();//开启线程}}public class myThread extends Thread{@Overridepublic void run() {super.run();while(true){try {Thread.sleep(100);//使线程休眠0.1秒} catch (InterruptedException e) {e.printStackTrace();}if(p==100){//当前进度等于总进度时退出循环p=0;break;}p++;pb_main_download.setProgress(p);//给进度条的当前进度赋值tv_main_desc.setText(p+"%");//显示当前进度为多少}}}
}

页面效果:

点击Download按钮后的效果:

解决方法:写一个类去继承Handler,重写handleMessage方法,Handler用于线程之间的通信,相当于一个中介

修改后MainActivity.java里的代码如下:

public class MainActivity extends AppCompatActivity {private int p=0;//当前进度private ProgressBar pb_main_download;//进度条private TextView tv_main_desc;//显示文本的控件private MyHandler myHandler=new MyHandler();//新写的Handler类public class MyHandler extends Handler{@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);int code=msg.what;//接受处理码switch (code){case 1:p++;pb_main_download.setProgress(p);//给进度条的当前进度赋值tv_main_desc.setText(p+"%");//显示当前进度为多少break;}}}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//根据ID找到进度条pb_main_download=findViewById(R.id.pb_main_download);//根据ID找到显示文本的控件tv_main_desc=findViewById(R.id.tv_main_desc);}//点击Download按钮所调用的方法public void download(View view) {if(0==p){//如果当前进度为0new myThread().start();//开启线程}}public class myThread extends Thread{@Overridepublic void run() {super.run();while(true){try {Thread.sleep(100);//使线程休眠0.1秒} catch (InterruptedException e) {e.printStackTrace();}if(p==100){//当前进度等于总进度时退出循环p=0;break;}Message msg=new Message();msg.what=1;myHandler.sendMessage(msg);//发送处理码}}}
}

点击Download按钮后的效果:

Android中的常用控件之进度条(ProgressBar)相关推荐

  1. Android中list常用方法,Android中的常用控件及其基本用法

    TextView的使用方法 布局文件中的配置: 在Activity类中的使用: TextView textView1 = (TextView)findViewById(R.id.textView1); ...

  2. Android之解决VideoView控件的进度条位置摆放问题和打开播放黑屏问题

    1 问题 VideoView控件如何配合MediaController使用,就会显示进度条,但是位置摆放在最底部,不是我们想要的结果 2.基本使用 private var mMediaControll ...

  3. Android中的基础控件TextView、Button、ImageView、EditText、ProgressBar

    文章目录 1 Android中的基础控件 1.1 控件的通用属性 2 TextView 2.1 TextView的继承关系 2.2 TextView的常用属性 3 EditText 3.1 常用属性 ...

  4. 从零开始学android:Android中的基本控件(上)

    从零开始学android:Android中的基本控件(上) 本章内容较多,下面只贴代码,大家只需要贴到自己eclipse里就知道作用^^! View组件简介 Android中的View组件包含了几乎所 ...

  5. Android学习:常用控件

    Android学习:常用控件 学习要点:掌握文本框.编辑框.按钮.单选按钮.复选框等基本控件的用法 控件是Android应用程序中用户界面的重要组成元素,正是因为Android应用程序提供了很多具有不 ...

  6. Android 第九课 常用控件-------ListView

    ListView允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时屏幕上原有数据将会滚动出屏幕. 1.ListView简单用法 如何将ListView将你要显示的大量内容关联起来呢?这是个 ...

  7. Android自定义没有资源文件的圆形进度条ProgressBar

    最近公司开发的SDK中需要使用圆形加载进度条,而且说要那种动态的转圈圈的那种进度条.当然这种进度条想实现很简单,用几个资源图片,以动画循环播放就行.但考虑到是SDK,有资源文件不好打包,想打包就要用到 ...

  8. Android中的基础控件CheckBox、RadioButton、ToggleButton、SeekBar

    文章目录 1 CheckBox 1.1 CheckBox介绍 2 RadioButton 2.1 RadioButton介绍 3 ToggleButton 3.1 ToggleButton介绍 4 S ...

  9. android中的 listview控件,聊聊Android中的ListView控件

    软硬件环境 Macbook Pro MGX 72 Android Studio 1.3.2 坚果手机 前言 ListView是Android系统中使用非常广泛的一种控件,几乎所有的App都会用到它.它 ...

最新文章

  1. DataWorks 安装手册
  2. MySQL 记录中包含换行符
  3. 设计模式复习-备忘录模式
  4. HighNewTech:带你解读云计算、雾计算(Fog Computing)、边缘计算(Edge Computing)的前世今生
  5. 【实用/转载】ALV OO Container屏幕自适应设置
  6. samba实现linux之间文件共享,使用 samba 实现文件共享
  7. 【输入一个数,判断是否为素数(质数)】
  8. MySQL 数据库插入速度调整
  9. iOS在支持arc的工程中,导入不支持arc的第三方的插件
  10. 打开html文件图片为什么没有_提高网站打开速度秘诀:压缩html,Javascript和CSS文件...
  11. qt写的一个计算器程序
  12. hdoj1160:FatMouse's Speed(dp+最长递减子序列思想+数组巧妙记录输出)
  13. 制作软盘镜像文件的几种方法
  14. 随机产生四位,任意位或者范围数字方法
  15. 哈佛《幸福课》 第2课 为什么要学积极心理学
  16. linux bt客户端 命令行,Linux下的Bt客户端
  17. LabVIEW 将图表数据导出到Excel
  18. Jedis实现抽奖功能
  19. 微信为什么没有城市服务器,微信没有城市服务怎么办?微信添加城市服务的教程...
  20. 文件路径 - Windows、Linux系统上的斜线,反斜线区别

热门文章

  1. stimulsoft oracle,报表仪表设计器Stimulsoft的处理数据功能
  2. Arm Compiler for Embedded 6 编译器工具链常用选项
  3. c语言程序主要的结构特点是什么,1. C语言的结构特点?
  4. 新研究起底人类和机器注意力机制的区别|一周AI最火论文
  5. 【Android Camera2】玩转图像数据 -- NV21图像旋转,镜像,转rgba代码分析,性能优化
  6. 蓝鲸作业流程编排--参数使用
  7. 机械臂抓取学习笔记四
  8. Unity超链接:支持点击事件,下划线以及自定义颜色
  9. Zabbix6.2这些新特性太棒了,手把书教你在Linux部署Zabbix6.2,速度收藏!
  10. 5:实战2:微信自动加好友 JavaAppium