ProgressBar 的使用
来源:互联网 发布:淘宝介入需要什么证据 编辑:程序博客网 时间:2024/06/05 14:46
书写是为了更好地思考》Android》Widget》ProgressBar》ProgressBar的使用》
在应用中,我们常常需要一些指示性的东西,来提示我们的用户,此时app正在努力做一些操作。在这样的需求下,进度条可以使用ProgressBar
ProgressBar的使用
关键字 Keywords
进度条(ProgresssBar)可视化的指示器(Visual Indicator)次要进度(Secondary Progress)中间进度(Intermediate Progress)不确定的(indeterminate)Chrome Android progressBar Any.Do rogreassBar
概述 Class Overview[1]
进度条(ProgresssBar) 是某些操作中的(操作)进度的可视化的指示器(Visual Indicator)。它通过一个“条(bar)”,向用户呈现操作的进度;当它向前移动的时候,应用程序可以,通过修改bar的长度,改变总进度。此外,它还有一个次要进度(Secondary Progress)可以显示在进度条上,当需要显示中间进度(Intermediate Progress) 时,次要进度很有用,如在流媒体播放的缓冲区的进度。
进度条也可以是不确定的(indeterminate)。在不确定模式下,进度条显示为一个循环动画,并且没有进度指示器。这种模式常用于应用程序使用任务的长度是未知的时候。不确定进度条可能要么是一个旋转的轮子(A spinning wheel)或者一个水平条(A horizontal bar)。
使用 General Usage
在布局文件中添加一个进度条,需要使用<ProgressBar> 元素。默认情况下,进度条显示为一个旋转的轮子,即为不确定。当然,我们也可以指定进度条的显示样式。接下来,介绍调用Android预定义的ProgressBar的样式的使用和用户自定义ProgressBar的样式的使用。
Android预定义ProgressBar的样式
首先,让我们看看Android给我们预先定义好了ProgressBar的哪些样式。
- @android:style/Widget.ProgressBar
默认的ProgressBar的样式,是一个中等大小的圆形进度条。
- Widget.ProgressBar.Small
偏小的ProgressBar的样式,是一个相对较小的圆形进度条。
- Widget.ProgressBar.Large
偏大的ProgressBar的样式,是一个相对较大的圆形进度条。
- Widget.ProgressBar.Inverse
反选的ProgressBar的样式,是一个中等大小的圆形进度条。
“反选的”(Inverse)样式是,在浅颜色的主题(light color theme,即白色背景),提供一种“相反”颜色的进度条。
- Widget.ProgressBar.Small.Inverse
偏小的、反选的ProgressBar的样式,是一个相对较小的圆形进度条。
- Widget.ProgressBar.Large.Inverse
偏大的、反选的ProgressBar的样式,是一个相对较大的圆形进度条。
- Widget.ProgressBar.Horizontal
水平的ProgressBar的样式,是一个水平的进度条。
- ?android:attr/progressBarStyleSmallTitle
偏小的ProgressBar的样式,是一个相对较小的圆形进度条,且在标题栏中显示。
然后,让我们看看如何在Layout布局文件中引入ProgressBar。
<ProgressBar style="@android:style/Widget.ProgressBar.Horizontal" style="?android:attr/progressBarStyleHorizontal" ... />
用户自定义ProgressBar的样式
在我们要实现自定义样式之前,让我们先来了解一下ProgressBar的XML文件中常用属性。
Attribute NameDescription android:animationResolution动画帧与帧之间的时间间隔(毫秒为单位)*android:indeterminate是否开启不确定模式( the indeterminate mode) android:indeterminateBehavior
在不确定模式下,当达到进度的最大值时,该属性规定了该如何变化。该属性对于两个值:repeat 和 cyclic。
repeat :动画将从0开始;(default)
cyclic:动画将从最大值回到0。
android:indeterminateDrawable在不确定模式下使用的drawable android:indeterminateDuration不确定模式持续的时间 android:indeterminateOnly限制为不确定模式,控制进度不起作用。 android:interpolatorandroid:max进度可以到达的最大值,如标题栏进度条最大值为1000。 android:maxHeight规定进度条的最大高度的尺寸值 android:maxWidth规定进度条的最大宽度的尺寸值
android:minHeight规定进度条的最小高度的尺寸值
android:minWidth规定进度条的最小宽度的尺寸值
android:progress定义进度的初始值,[0, max] android:secondaryProgress定义次进度的初始值,[0, max] android:progressDrawableDrawable used for the progress mode.
(其中,标记为“*”的为我们实现自定义视图需要指定的)
接下来,让我们看一下Widget.ProgressBar.Small的样式[2]
<style name="Widget.ProgressBar.Small"> <item name="android:indeterminateDrawable">@android:drawable/progress_small_white</item> <item name="android:minWidth">16dip</item> <item name="android:maxWidth">16dip</item> <item name="android:minHeight">16dip</item> <item name="android:maxHeight">16dip</item> </style>
其中@android:drawable/progress_small_white为显示的图像,剩下的四个Item是定义不确定进度条的显示的大小,这个我们不应该自己来定义,否则会导致不一致问题。由此, 在我们定义自己ProgressBar的样式的时候,可以将适度大小的ProgressBar作为Parentstyle。
<style name="MyProgressBar.Small" parent="@android:style/Widget.ProgressBar.Small"> <item name="android:indeterminateDrawable">@drawable/progress_small_green</item>
示例Demo
接下来,通过一些代码片段,来进一步加深对ProgressBar的理解。
标题栏进度条ProgressBar In Title Bar[3]
在标题栏中,可以在ActionBar上显示一个不确定进度条或者一个水平进度条。下面是显示两个进度条的代码片段。其中涉及进度条更新(进度、隐藏/显示),均必须在UI线程中执行。
显示不确定进度条
需要在Window中注册Intermediate Progress Bar,并且注册必须在setContentView调用之前。
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);setContentView(R.layout.activity_view_layout);动态的显示或者隐藏Intermediate ProgressBar。setProgressBarIndeterminateVisibility(true|false);
水平进度条
必须在setContentView之前调用。
requestWindowFeature(Window.FEATURE_PROGRESS);setContentView(R.layout.activity_view_layout);设置进度的长度,0 <= progress <= 10000.setProgress(int progress)设置次要进度的长度,0 <= secondaryProgress <= 10000.setSecondaryProgress(int secondaryProgress)
实时进度 Running Progress[4]
如果想要通过ProgressBar来显示一个真正的进度,必须使用水平条。在操控水平的进度条时,
如果想要在当前的进度上,增加一些进度,可以调用
public synchronized final void incrementProgressBy(int diff),或者public synchronized void setProgress(int progress) 来改变主进度;调用public synchronized final void incrementSecondaryProgressBy(int diff),或者public synchronized void setSecondaryProgress(int secondaryProgress)来改变次要进度。其中,diff 为偏移量,progress 和 secondaryProgress为具体的进度。
ProgressDialog 中显示进度条[5]
ProgressDialog是AlertDialog的一个子类,她在AlertDialog的基础上(能以弹出窗的形式显示),整合了ProgressBar的特性,拥有一个进度指示器(progress indicator),和一个可选的文本信息(text message)或者视图(view),要求文本信息和视图不能同时存在。进度范围[0,10000]。功能很强大的一个控件,有需要可以研究source code
AppWidgetProvider 中显示进度条[6]
Brain Power
当我们在实现类似Android Chrome的进度条(在ActionBar之下,当内容加载时显示) 和 Any.Do的进度条(在ActionBar之上,当更新内容时显示),我们需要用到的是自定义的ActionBar,在形如custome_action_bar_layout.xml 文件中,声明我们需要的进度条的样式。个人比较喜欢他们Android Holo 的样式,在我们的styles中可以插入如下代码
<style name="CustomeProgressBarHorizontalHoloDark" parent="@android:style/Widget.ProgressBar.Horizontal"> <item name="android:progressDrawable">@drawable/progress_horizontal_holo_dark</item> <item name="android:max">100</item> <item name="android:minHeight">5dip</item> <item name="android:maxHeight">5dip</item> <item name="android:layout_width">match_parent</item> <item name="android:layout_height">wrap_content</item> </style> <style name="CustomeProgressBarHorizontalHoloLight" parent="@android:style/Widget.ProgressBar.Horizontal"> <item name="android:progressDrawable">@drawable/progress_horizontal_holo_light</item> <item name="android:max">100</item> <item name="android:minHeight">5dip</item> <item name="android:maxHeight">5dip</item> <item name="android:layout_width">match_parent</item> <item name="android:layout_height">wrap_content</item> </style>
其中holo_dark的drawable为:
<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@android:id/background" android:drawable="@drawable/progress_bg_holo_dark"/> <item android:id="@android:id/secondaryProgress"> <scale android:drawable="@drawable/progress_horizontal_holo_dark" android:scaleWidth="100%" /> </item> <item android:id="@android:id/progress"> <scale android:drawable="@drawable/progress_primary_holo_dark" android:scaleWidth="100%" /> </item></layer-list>以上用到的资源,都可以从android资源中找到
[1] 该部分内容参考自developer.android
[2] 参考自Android JellyBean’s Style
[3] 具体的代码示例参考ApidDemon ProgressBar1 & ProgrgressBar4
[4] 具体的代码示例参考ApidDemon ProgressBar1
[5] 详情参看developer.android.ProgressDialog,具体的代码示例参考ApidDemon ProgressBar3
[6] 多式样ProgressBar
- ProgressBar组件的使用
- ProgressBar的使用
- ProgressBar控件的使用
- ProgressBar的使用
- android ProgressBar的使用
- android ProgressBar的使用
- ProgressBar 的使用
- ProgressBar的简单使用
- ProgressBar的正确使用
- ProgressBar的简单使用
- Android ProgressBar的使用!
- progressbar 进度条的使用
- ProgressBar的使用
- ProgressBar的使用
- ProgressBar的使用
- Progressbar的使用
- ProgressBar的使用
- ProgressBar的简单使用
- Programming Paradigms
- 【转载】R6034错误,C Runtime Error
- ExtJs4 与MVC
- JAVA 正则表达式
- VB.net中 excel 的range方法
- ProgressBar 的使用
- 结构体初始化
- Outlook.com支持32个新的国际域名和别名登录
- 第七周任务-模板类
- 学习《简明Python教程》应该注意的地方
- 友元函数运算+ - * /
- MQTT推送资料大全
- 项目1
- typedef的使用