ProgressBar.setProgressDrawable在Android 2.3中不工作



我目前正在使用动态更新的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));

然而,这不仅没有更新进度条,而且还把空白的进度条全部去掉了。但是,如果我在xml中设置android:progressDrawable="@drawable/progressbar_blue_states"并取出这个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" />

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

这意味着在搜索栏中有一个新的可绘制集,但可绘制集的大小为0,您将看不到任何内容。

Rect bounds = mySeekBar.getProgressDrawable().getBounds();
mySeekBar.setProgressDrawable(newSeekBarBackground);
mySeekBar.getProgressDrawable().setBounds(bounds);

根据这个帖子https://stackoverflow.com/a/6953534/3223742

一个好的解决方案是将progress设置为1;重新设置最大进度,然后设置实际进度:

progressBar.setProgressDrawable(...);
progressBar.setProgress(1);
progressBar.setMax(maxProgress);
progressBar.setProgress(progress);

最新更新