Android自定义进度条时padding无效果?

前言

标题很简单,自定义带padding的水平进度条,也就是如下效果的进度条:

其实很简单,但是因为有一个坑还是要提出来,话不多说了,首先看看正常的实现:

常规方案

首先是布局文件中放一个ProgressBar控件:

1
2
3
4
5
6
<ProgressBar
android:id="@+id/custom_horizontal_progress"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="16dp"
android:progressDrawable="@drawable/progress_bg_drawable"/>

补充:为了更直观,我直接将16dp写到了布局文件中,规范写法这些值要放到dimen资源文件中引用

然后drawable目录下的progress_bg_drawable.xml文件是这样的:

绿色的进度条资源文件green_progress_drawable.xml是这样的:

这个资源文件主要是对上面的绿色进度设置一些渐变色和圆角属性,如果没有渐变色,直接设置填充色solid属性即可。好了,到此自定义带padding的水平进度条基本工作就完成了,很简单,然后运行一看,效果也都和设计要求一样,似乎很顺利

出现的问题

但是,你会发现在Android5.1以下的版本上,这样设置并不会有padding效果!!!

为什么会这样,我还没搞明白,因为毕竟这不像是某个接口可以去看源码,看不同Android版本源码发生的改变,也没有Google出什么结果,如果有知道的还希望告知一下。那么如何解决Android 5.1以下的没有padding效果呢,继续往下看

解决方案

解决办法就是修改上面的进度资源文件green_progress_drawable.xml,修改之后是这样的:

修改的目的也就是在这里面设置padding,当然里面那个透明背景的第一个item是可要可不要的,重新在Android5.1以下的版本上运行,你会发现都带padding效果了,和设计的要求一样了

注意

还没结束,如果你这样在Android 5.1以上的版本执行的时候你会发现原本你想要padding=2dp的效果, 确变成了padding=4的效果,原因是之前在progress_bg_drawable.xml文件中设置的padding在只在 Android5.1以上有效果,而在green_progress_drawable.xml里面设置的padding在各个Android版本上都有效果,所以记住把progress_bg_drawable.xml中设置的padding属性删除掉,防止在Android5.1以上的版本上重复设置