未应用进度条drawable上的填充

时间:2014-08-26 14:43:15

标签: android android-drawable android-progressbar

我的进度条有这个可绘制的:

<item android:id="@android:id/background"  android:top="5dp">
    <shape>
        <gradient
            android:angle="270"
            android:centerColor="@color/gray11"
            android:centerY="0.75"
            android:endColor="@color/gray11"
            android:startColor="@color/gray11" />
    </shape>
</item>
<item android:id="@android:id/secondaryProgress"  android:top="5dp">
    <clip>
        <shape>
            <gradient
                android:angle="270"
                android:centerColor="@color/blue1"
                android:centerY="0.75"
                android:endColor="@color/blue1"
                android:startColor="@color/blue1" />
        </shape>
    </clip>
</item>
<item android:id="@android:id/progress" android:top="5dp">

    <clip>
        <shape>
            <gradient
                android:angle="270"
                android:endColor="@color/blue1"
                android:startColor="@color/blue1" />
        </shape>
    </clip>
</item>

我想向下移动drawable,所以我添加了android:top =“5dp”,但填充(向下移动)没有应用,我无法理解。

2 个答案:

答案 0 :(得分:2)

这可能为时已晚,但我会在此处发布此信息,以便将来遇到此问题的任何人都会遇到这个问题。

在Marshmallow之前,有一个错误,当LayerDrawable用作进度可绘制时,忽略了LayerDrawable的子项上的某些属性。该错误实际上位于ProgressBar,其中android:progressDrawable的值将通过tileify方法运行,该方法将重新生成LayerDrawable,但无法复制某些属性(最值得注意的是填充物。)

您可以在AOSP here中看到此修复程序。

此问题最简单的解决方法是从代码中调用setProgressDrawable而不是提供android:progressDrawable。由于setProgressDrawable没有调用tileify(并且因为tileify对于没有BitmapDrawable)的所有情况也可能是无操作的,所以你&# 39;保留你的填充物和其他属性。

但请注意,如果您的进度抽取包含bitmap / BitmapDrawable,您可能需要自己实施tileify的一部分,以确保您获得相同的平铺行为来自xml(或者,在Lollipop及以上,你可以调用setProgressDrawableTiled)。

答案 1 :(得分:0)

&lt;&lt;&lt;&lt; item&gt;标签。它只是没有解析或包含它,因为在那里做它没有多大意义。

正确设置填充应作为子项包含在您的&lt;形状&gt;像这样的标签:

<item android:id="@android:id/progress">
    <clip>
        <shape>
            <padding 
                android:top="5dp" />
            <gradient
                android:angle="270"
                android:endColor="@color/blue1"
                android:startColor="@color/blue1" />
        </shape>
    </clip>
</item>