0

我正在使用 Android 中的进度条,XML 声明如下:

   <ProgressBar
        android:id="@+id/progress"
        style="?android:attr/progressBarStyleHorizontal"
        android:progressDrawable="@color/green" <!-- See below about this line -->
        android:max="10000"
        android:progress="10000"
        android:layout_width="fill_parent"
        android:layout_height="3dp"
        android:layout_alignParentTop="true"/>

因此,进度条在其全部荣耀或其他情况下显示得很好。但我有一个 ASyncTask 会将进度条的进度重置为 0,然后将其加载回最大值。这行不通。相反,进度条只是保持在最大值。我继续记录进度条的进度,当它应该重置为 0 并更新时,根据进度条的 getProgress() 方法,它实际上会变为 0,然后重新构建到 10000。当你真正看手机虽然只是满了。

所以回头看看 XML,你会发现我注意到了 android:progressDrawable 行。这是我更改进度条颜色的地方。如果我删除该行,进度条将按预期运行。但是,当进度条的可绘制对象设置为我想要的颜色时,它只是坐在那里,屏幕上会出现完整的进度。

我之前使用过这个progressDrawable 属性没有任何问题,但在这种情况下,它只是让我很头疼。关于如何解决这个问题的任何经验或想法?谢谢!

4

1 回答 1

3

问题是android:progressDrawable属性。在这种情况下,您应该使用layer-list drawable

Horizo​​ntal ProgressBar 使用多达 3 个不同的层 - 背景、进度和secondaryProgress(在您的情况下不需要secondaryProgress)。由于您使用了简单的颜色,我怀疑该颜色用于背景,而其他两种颜色保持未设置且透明。

你所需要的只是一个像这样的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="@android:color/transparent"/>
    <item android:id="@android:id/progress">
        <clip android:drawable="@color/green" />
    </item>

</layer-list>
于 2012-08-14T01:20:01.140 回答