虽然进度在变化,但Android水平进度条没有更新视图

时间:2012-08-13 23:54:56

标签: android progress-bar

我正在使用Android中的Progress Bar,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这一行。这是我改变进度条颜色的地方。如果我删除该行,则进度条的行为与预期一致。但是当进度条的drawable设置为我想要的颜色时,它就会坐在屏幕上完全进度。

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

1 个答案:

答案 0 :(得分:3)

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

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

你需要的只是一个像这样的抽象:

<?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>