当前位置:   article > 正文

Android进度条ProgressBar使用详解_android progressbar

android progressbar

先介绍一下ProgressBar几种比较常用的属性

布局中设置:

  1. android:max="100" ——最大显示进度
  2. android:progress="50"——第一显示进度
  3. android:secondaryProgress="80"——第二显示进度
  4. android:indeterminate="true"——设置是否精确显示,true表示不精确显示进度,false表示精确显示进度

使用Java代码设置:

  1. setProgress(int) //设置第一进度
  2. setSecondaryProgress(int) //设置第二进度
  3. getProgress() //获取第一进度
  4. getSecondaryProgress() //获取第二进度
  5. incrementProgressBy(int) //增加或减少第一进度
  6. incrementSecondaryProgressBy(int) //增加或减少第二进度
  7. getMax() //获取最大进度

        对普通进度条和提示框进度条就不详细说明了,后面有一个例子,会有几种进度条的使用方法,在代码中有详细的注释。这里介绍一下自定义进度条的实现,以水平进度条为例。

1、在布局文件中的style属性就是设置进度条样式的

  1. <ProgressBar
  2. android:id="@+id/progressBar1"
  3. style="?android:attr/progressBarStyleHorizontal"
  4. android:layout_width="match_parent"
  5. android:layout_height="wrap_content" />

2、实际上面的背景文件是位于@android:style/Widget.ProgressBar.Horizontal,既上面的布局可以写成

  1. <ProgressBar
  2. android:id="@+id/progressBar1""
  3. style="@android:style/Widget.ProgressBar.Horizontal"
  4. android:layout_width="match_parent"
  5. android:layout_height="wrap_content" />

3、查看系统中的水平进度条风格文件

  1. <style name="Widget.ProgressBar.Horizontal">
  2. <item name="android:indeterminateOnly">false</item>
  3. <item name="android:progressDrawable">@android:drawable/progress_horizontal</item>
  4. <item name="android:indeterminateDrawable">@android:drawable/progress_indeterminate_horizontal</item>
  5. <item name="android:minHeight">20dip</item>
  6. <item name="android:maxHeight">20dip</item>
  7. </style>

4、上面的android:progressDrawable属性是设置进度条背景,进入查看

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- Copyright (C) 2008 The Android Open Source Project
  3. Licensed under the Apache License, Version 2.0 (the "License");
  4. you may not use this file except in compliance with the License.
  5. You may obtain a copy of the License at
  6. http://www.apache.org/licenses/LICENSE-2.0
  7. Unless required by applicable law or agreed to in writing, software
  8. distributed under the License is distributed on an "AS IS" BASIS,
  9. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. See the License for the specific language governing permissions and
  11. limitations under the License.
  12. -->
  13. <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  14. <item android:id="@android:id/background">
  15. <shape>
  16. <corners android:radius="5dip" />
  17. <gradient
  18. android:startColor="#ff9d9e9d"
  19. android:centerColor="#ff5a5d5a"
  20. android:centerY="0.75"
  21. android:endColor="#ff747674"
  22. android:angle="270"
  23. />
  24. </shape>
  25. </item>
  26. <item android:id="@android:id/secondaryProgress">
  27. <clip>
  28. <shape>
  29. <corners android:radius="5dip" />
  30. <gradient
  31. android:startColor="#80ffd300"
  32. android:centerColor="#80ffb600"
  33. android:centerY="0.75"
  34. android:endColor="#a0ffcb00"
  35. android:angle="270"
  36. />
  37. </shape>
  38. </clip>
  39. </item>
  40. <item android:id="@android:id/progress">
  41. <clip>
  42. <shape>
  43. <corners android:radius="5dip" />
  44. <gradient
  45. android:startColor="#ffffd300"
  46. android:centerColor="#ffffb600"
  47. android:centerY="0.75"
  48. android:endColor="#ffffcb00"
  49. android:angle="270"
  50. />
  51. </shape>
  52. </clip>
  53. </item>
  54. </layer-list>

5、可以看到,上面文件中的3个item标签分别是设置:进度条、第二进度条、第一进度条的背景色。这里我们在drawable文件夹下新建一个progress_bar.xml文件,将上面的代码复制进来,并修改背景色。注意:最外层标签是否一致,我在复制时只复制了3个item,结果总是报错,找了半天才找到原因。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
  3. <!-- 进度条背景色 -->
  4. <item android:id="@android:id/background">
  5. <shape>
  6. <corners android:radius="5dip" />
  7. <gradient
  8. android:startColor="#ff9d9e9d"
  9. android:centerColor="#ff5a5d5a"
  10. android:centerY="0.75"
  11. android:endColor="#ff747674"
  12. android:angle="270"
  13. />
  14. </shape>
  15. </item>
  16. <!-- 第二进度条 -->
  17. <item android:id="@android:id/secondaryProgress">
  18. <clip>
  19. <shape>
  20. <corners android:radius="5dip" />
  21. <gradient
  22. android:startColor="#b9a4ff"
  23. android:centerColor="#c6b7ff"
  24. android:centerY="0.75"
  25. android:endColor="#c3b2ff"
  26. android:angle="270"
  27. />
  28. </shape>
  29. </clip>
  30. </item>
  31. <!-- 第二进度条 -->
  32. <item android:id="@android:id/progress">
  33. <clip>
  34. <shape>
  35. <corners android:radius="5dip" />
  36. <gradient
  37. android:startColor="#57e8ff"
  38. android:centerColor="#74ebff"
  39. android:centerY="0.75"
  40. android:endColor="#8eefff"
  41. android:angle="270"
  42. />
  43. </shape>
  44. </clip>
  45. </item>
  46. </layer-list>

6、在布局文件中设置自定义背景增加android:progressDrawable="@drawable/progress_bar"属性设置

  1. <ProgressBar
  2. android:id="@+id/progressBar1"
  3. style="@android:style/Widget.ProgressBar.Horizontal"
  4. android:progressDrawable="@drawable/progress_bar"
  5. android:layout_width="match_parent"
  6. android:layout_height="wrap_content" />

        上面的自定义进度条只是修改了一下背景颜色,如果同时修改其他属性,还可以将进度条风格也在自己的style.xml文件中重新定义使用。

        下面是一个完整的进度条使用代码,注释比较详细,自定义进度条直接使用上面的progress_bar的设置。
1、布局文件

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent" >
  5. <ProgressBar
  6. android:id="@+id/progressBar1"
  7. style="?android:attr/progressBarStyleLarge"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. android:layout_alignParentLeft="true"
  11. android:layout_alignParentTop="true" />
  12. <ProgressBar
  13. android:id="@+id/progressBar2"
  14. android:layout_width="wrap_content"
  15. android:layout_height="wrap_content"
  16. android:layout_alignParentLeft="true"
  17. android:layout_below="@+id/progressBar1" />
  18. <ProgressBar
  19. android:id="@+id/progressBar3"
  20. style="?android:attr/progressBarStyleSmall"
  21. android:layout_width="wrap_content"
  22. android:layout_height="wrap_content"
  23. android:layout_alignParentLeft="true"
  24. android:layout_below="@+id/progressBar2" />
  25. <ProgressBar
  26. android:id="@+id/progressBar4"
  27. android:max="100"
  28. android:progress="50"
  29. android:secondaryProgress="80"
  30. style="?android:attr/progressBarStyleHorizontal"
  31. android:layout_width="match_parent"
  32. android:layout_height="wrap_content"
  33. android:layout_alignParentLeft="true"
  34. android:layout_below="@+id/progressBar3" />
  35. <Button
  36. android:id="@+id/button1"
  37. android:layout_width="wrap_content"
  38. android:layout_height="wrap_content"
  39. android:layout_alignParentLeft="true"
  40. android:layout_below="@+id/progressBar4"
  41. android:text="增加" />
  42. <Button
  43. android:id="@+id/button2"
  44. android:layout_width="wrap_content"
  45. android:layout_height="wrap_content"
  46. android:layout_below="@+id/progressBar4"
  47. android:layout_toRightOf="@+id/progressBar1"
  48. android:text="减少" />
  49. <Button
  50. android:id="@+id/button3"
  51. android:layout_width="wrap_content"
  52. android:layout_height="wrap_content"
  53. android:layout_alignBaseline="@+id/button2"
  54. android:layout_alignBottom="@+id/button2"
  55. android:layout_toRightOf="@+id/button2"
  56. android:text="重置" />
  57. <TextView
  58. android:id="@+id/textView1"
  59. android:layout_width="match_parent"
  60. android:layout_height="wrap_content"
  61. android:layout_alignParentLeft="true"
  62. android:layout_below="@+id/button1"
  63. android:text="TextView" />
  64. <Button
  65. android:id="@+id/button4"
  66. android:layout_width="wrap_content"
  67. android:layout_height="wrap_content"
  68. android:layout_alignParentLeft="true"
  69. android:layout_below="@+id/textView1"
  70. android:text="对话框进度条" />
  71. <ProgressBar
  72. android:id="@+id/progressBar5"
  73. android:max="100"
  74. android:progress="50"
  75. android:secondaryProgress="80"
  76. style="@android:style/Widget.ProgressBar.Horizontal"
  77. android:progressDrawable="@drawable/progress_bar"
  78. android:layout_width="match_parent"
  79. android:layout_height="wrap_content"
  80. android:layout_alignParentLeft="true"
  81. android:layout_below="@+id/button4" />
  82. </RelativeLayout>

2、Java代码中进度条功能实现

  1. package com.cx.testdemo;
  2. import android.app.Activity;
  3. import android.app.ProgressDialog;
  4. import android.content.DialogInterface;
  5. import android.os.Bundle;
  6. import android.view.View;
  7. import android.view.Window;
  8. import android.widget.Button;
  9. import android.widget.ProgressBar;
  10. import android.widget.TextView;
  11. import android.widget.Toast;
  12. public class MainActivity extends Activity implements android.view.View.OnClickListener{
  13. private ProgressBar progress;
  14. private Button button1;
  15. private Button button2;
  16. private Button button3;
  17. private Button button4;
  18. private TextView textView;
  19. private ProgressDialog progressDialog;
  20. @Override
  21. protected void onCreate(Bundle savedInstanceState) {
  22. super.onCreate(savedInstanceState);
  23. //启用窗口特征,启用带进度和不带进度的进度条
  24. requestWindowFeature(Window.FEATURE_PROGRESS);
  25. requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
  26. setContentView(R.layout.activity_main);
  27. //显示两种进度条
  28. setProgressBarVisibility(true);
  29. setProgressBarIndeterminateVisibility(true);
  30. //设置带进度条刻度,最大值为10000
  31. setProgress(600);
  32. findView();
  33. }
  34. private void findView() {
  35. // TODO Auto-generated method stub
  36. progress = (ProgressBar) findViewById(R.id.progressBar4);
  37. button1 = (Button) findViewById(R.id.button1);
  38. button2 = (Button) findViewById(R.id.button2);
  39. button3 = (Button) findViewById(R.id.button3);
  40. button4 = (Button) findViewById(R.id.button4);
  41. textView = (TextView) findViewById(R.id.textView1);
  42. init();
  43. button1.setOnClickListener(this);
  44. button2.setOnClickListener(this);
  45. button3.setOnClickListener(this);
  46. button4.setOnClickListener(this);
  47. }
  48. private void init() {
  49. //获取第一进度条进度
  50. int first = progress.getProgress();
  51. //获取第二进度条进度
  52. int second = progress.getSecondaryProgress();
  53. //获取进度条最大进度
  54. int max = progress.getMax();
  55. textView.setText("第一进度百分比:" + (int)(first/(float)max*100) + "% 第二进度百分比:" + (int)(second/(float)max*100));
  56. }
  57. @Override
  58. public void onClick(View v) {
  59. // TODO Auto-generated method stub
  60. switch (v.getId()) {
  61. case R.id.button1:
  62. //增加第一进度和第二进度10刻度
  63. progress.incrementProgressBy(10);
  64. progress.incrementSecondaryProgressBy(10);
  65. break;
  66. case R.id.button2:
  67. //减少第一进度和第二进度10刻度
  68. progress.incrementProgressBy(-10);
  69. progress.incrementSecondaryProgressBy(-10);
  70. break;
  71. case R.id.button3:
  72. progress.setProgress(50);
  73. progress.setSecondaryProgress(80);
  74. break;
  75. case R.id.button4:
  76. /**
  77. * 页面显示风格
  78. */
  79. //新建ProgressDialog对象
  80. progressDialog = new ProgressDialog(MainActivity.this);
  81. //设置显示风格
  82. progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
  83. //设置标题
  84. progressDialog.setTitle("提示");
  85. //设置对话框内信息
  86. progressDialog.setMessage("当前进度");
  87. //设置图标
  88. progressDialog.setIcon(R.drawable.ic_launcher);
  89. /**
  90. * 页面ProgressDialog的一些属性
  91. */
  92. //设置最大进度
  93. progressDialog.setMax(100);
  94. //设置初始化已经增长到的进度
  95. progressDialog.incrementProgressBy(50);
  96. //进度条是精确显示进度的
  97. progressDialog.setIndeterminate(false);
  98. //确定按钮(按钮类型,显示内容,点击事件)
  99. progressDialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定", new DialogInterface.OnClickListener() {
  100. @Override
  101. public void onClick(DialogInterface dialog, int which) {
  102. // TODO Auto-generated method stub
  103. Toast.makeText(MainActivity.this, "点击了确定按钮", Toast.LENGTH_SHORT).show();
  104. }
  105. });
  106. //是否可以通过返回按钮退出对话框
  107. progressDialog.setCancelable(true);
  108. //显示ProgressDialog
  109. progressDialog.show();
  110. break;
  111. }
  112. init();
  113. }
  114. }

源码下载

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/461110
推荐阅读
相关标签
  

闽ICP备14008679号