【问题标题】:ProgressBar.setProgressDrawable not working for Android 2.3ProgressBar.setProgressDrawable 不适用于 Android 2.3
【发布时间】:2013-03-20 23:30:26
【问题描述】:

我目前正在使用动态更新的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,而且还会完全删除进度条,因为它会留下空白。但是,如果我在 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" />

【问题讨论】:

  • 在将progressbar_blue 设置为可绘制进度时,您是否尝试过更新它的边界?
  • 你的意思是设置进度量吗?如果是这样,我们会在设置可绘制对象后立即执行此操作。
  • 如果您指的是布局边界,请在我在上面添加的 xml 中执行此操作。
  • 不,我指的是drawable的边界(除其他外,它从4.0开始)。像这样:Drawable newDr = getResources().getDrawable(R.drawable.progressbar_blue_states); newdr.setBounds(0, 0, progressbar.getWidth() - progressbar.getPaddingLeft() - progressbar.getPaddingRight(), progressbar.getHeight() - progressbar.getPaddingTop() -progressbar.getPaddingBottom()); progressbar.setProgressDrawable(newDr);?

标签: android


【解决方案1】:

我也遇到了同样的错误,但使用this answer解决了

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

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

【讨论】:

  • 谢谢!我遇到了同样的问题,这就是解决方案。
【解决方案2】:

据此帖https://stackoverflow.com/a/6953534/3223742

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

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

【讨论】:

    猜你喜欢
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    相关资源
    最近更新 更多