Android圆形ProgressBar存在多余间距,如何使其适配指定尺寸?
解决ProgressBar无法填满指定尺寸的问题
哈哈,这个问题我太熟悉了!默认的圆形ProgressBar看似设置了30x30dp的宽高,但内部的进度条drawable其实自带了默认padding,还可能有最小尺寸限制,所以才会出现奇怪的间隙。给你几个实用的解决办法,按需选择:
方法1:自定义ProgressBar的Drawable(最推荐,可控性强)
默认的系统ProgressBar drawable有固定的内边距,我们可以自己写一个没有多余padding的圆形进度条drawable,再给ProgressBar指定这个drawable。
首先创建一个自定义drawable文件(比如res/drawable/custom_circular_progress.xml):
<rotate xmlns:android="http://schemas.android.com/apk/res/android" android:fromDegrees="0" android:pivotX="50%" android:pivotY="50%" android:toDegrees="360"> <shape android:innerRadiusRatio="3" android:shape="ring" android:thicknessRatio="8" android:useLevel="false"> <!-- 这里直接设置和你控件一样的尺寸,确保填满 --> <size android:width="30dp" android:height="30dp" /> <!-- 这里可以自定义进度条的颜色渐变,按需修改 --> <gradient android:centerColor="#8000FF" android:centerY="0.50" android:endColor="#FF0000" android:startColor="#00FF00" android:type="sweep" android:useLevel="false" /> </shape> </rotate>
然后在布局里给ProgressBar指定这个drawable,同时去掉控件本身的padding:
<ProgressBar android:layout_width="30dp" android:layout_height="30dp" android:indeterminate="true" android:indeterminateDrawable="@drawable/custom_circular_progress" android:padding="0dp" />
这个方法能完全让进度条填满你设置的边界框,还能自定义颜色样式,非常灵活。
方法2:使用scaleType拉伸内部Drawable
如果不想自定义drawable,可以试试给ProgressBar设置scaleType="fitXY",让内部的进度条drawable强制拉伸填满整个控件:
<ProgressBar android:layout_width="30dp" android:layout_height="30dp" android:indeterminate="true" android:scaleType="fitXY" />
不过要注意,这个方法可能会让圆形进度条稍微变形(比如变成椭圆),如果对形状要求严格的话,不推荐用这个。
方法3:强制取消最小尺寸限制
默认的ProgressBar有minWidth和minHeight的默认值,就算你设置了更小的宽高,它也会按照最小尺寸来显示。可以把这两个属性设为0dp,让它完全遵循你设置的尺寸:
<ProgressBar android:layout_width="30dp" android:layout_height="30dp" android:indeterminate="true" android:minWidth="0dp" android:minHeight="0dp" />
这个方法简单,但如果内部drawable本身还有padding,可能还需要结合scaleType一起用才能完全填满。
内容的提问来源于stack exchange,提问作者Alexey
相关产品推荐
相关产品推荐

