9

我目前正在使用动态更新的ProgressBar. 通过某些百分比,进度条设置不同颜色的可绘制对象。我们目前在可绘制的 xml 中定义了各种可绘制的彩色剪辑。题为progressbar_blue_states详解如下:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

  <item android:id="@android:id/background"
      android:drawable="@drawable/progressbar_grey">
  </item>

  <item android:id="@android:id/progress">
      <clip android:drawable="@drawable/progressbar_blue" />
  </item>
</layer-list>

每当我们需要更新对话框时,我们都会调用以下代码:

progressBar.setProgressDrawable(getResources().getDrawable(R.drawable.progressbar_blue_states));

但是,这不仅不会更新 ProgressBar,而且还会完全删除进度条,因为它会留下空白。但是,如果我android:progressDrawable="@drawable/progressbar_blue_states"在 xml 中设置并取出这个setProgressDrawable()调用,它会正确加载。我们需要 setProgressDrawable 来根据需要更新颜色。

此调用在 Android 4.0+ 中运行良好,但在 Android 2.3 中我们遇到了一些麻烦。有任何想法吗?

编辑

这就是我们在 xml 中设置 ProgressBar 的方式:

<ProgressBar android:id="@+id/progress"
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_marginBottom="2dp"
            android:indeterminate="false"
            android:indeterminateOnly="false"
            android:progress="24"
            android:max="100"
            android:progressDrawable="@drawable/progressbar_red_states" />
4

2 回答 2

9

我有同样的错误,但通过使用这个答案解决了

这意味着seekbar有一个新的drawable集,但是drawable的大小是0,你什么都看不到。

Rect bounds = mySeekBar.getProgressDrawable().getBounds();
mySeekBar.setProgressDrawable(newSeekBarBackground);
mySeekBar.getProgressDrawable().setBounds(bounds);
于 2013-06-21T09:18:21.270 回答
4

According to this post https://stackoverflow.com/a/6953534/3223742

a good solution is to set progress to 1; re-set max progress, and then set the real progress :

progressBar.setProgressDrawable(...);
progressBar.setProgress(1);
progressBar.setMax(maxProgress);
progressBar.setProgress(progress);
于 2014-04-24T06:58:56.780 回答