作为比较常见的控件,经常需要针对项目对其进行一定程度的定制和修改,当然一些较大程度的定制和修改都是基于自定义View进行绘制的,但是一些改动较小的地方便可以使用Android原生progressbar进行实现。
progressbar分为两种样式,一种为普通的圆形样式,没有具体的进度值,仅仅作为loading提示作用。另一种为水平样式,可以显示出当前的执行进度。可以在xml下通过不同的style进行选择,默认为圆形样式,设置style为xxxx.ProgressBar.Horizontal即为水平样式。
最常见的为progressbar设置想要的颜色,默认情况下progressbar等控件的颜色都是系统主题色colorAccent,如果需要别的颜色便需要自己设置。
水平样式中,有一种水平样式的style可以通过直接设置background来改变progressbar的颜色,但是这样有较大的局限性,例如这种方式虽然颜色可以更改但是高度是固定的,也就是无论android:layout_height属性设置多少都会是一个默认高度,所以这里就不再过多叙述,直接说最实用的。progressbar有一个属性progressDrawable,该属性可以看成progressBar可用的background,我们可以设置XML文件来实现改变progressbar外观。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape >
<solid android:color="@color/colorNone" />
</shape>
</item>
<item android:id="@android:id/progress" >
<clip >
<shape>
<solid android:color="@color/colorSSSS" />
</shape>
</clip>
</item>
</layer-list>
不同于一般的XML背景文件,progressBar特殊在它拥有一个progress(进度),也就是进度值是需要改变的,所以需要专门为progress属性进行外观的设置,即item下指定android id =@android:id/progress,与之对应的是普通的android id =@android:id/background,其他的设置方法和一般的写法大同小异。唯一一点需要注意的是在写progress的形状参数时,外层必须加上<clip>标签,大概是代表progress是可变并且为浮层的意思。如果没有该标签progress会全部显示,也就是看上去进度始终是100%的。
圆形样式中,除了上面那种方式,android5.0以后还新加了两个属性
android:indeterminateTint="@color/colorDetailsLine"//设置的颜色
android:indeterminateTintMode="src_atop"//固定样式
除了修改颜色外,还能通过几个属性来对进度条外观和行为进行修改
android:indeterminateDrawable="" //更改的图片
android:indeterminateDuration="" //持续的时间
android:indeterminateBehavior="repeat" //行为,循环
android:indeterminateOnly="true"
可以设置一张自定义的图片并且自定义动画,为该动画设置时间,行为。可以实现圆形样式的效果。