2013-03-20 48 views
8

Tôi hiện đang làm việc với cập nhật động ProgressBar. Thông qua tỷ lệ phần trăm nhất định, thanh progessbar có thể vẽ được một màu khác. Chúng tôi hiện có nhiều clip có thể vẽ được xác định trong một xml có thể vẽ được. Một trong những quyền progressbar_blue_states được trình bày chi tiết như sau:ProgressBar.setProgressDrawable không hoạt động cho Android 2.3

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

Bất cứ khi nào chúng ta cần phải cập nhật các hộp thoại, chúng ta gọi là đoạn mã sau:

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

Tuy nhiên, không chỉ thực hiện điều này không cập nhật ProgressBar, mà còn nó sẽ đưa ra thanh tiến trình hoàn toàn, nơi khoảng trắng được để ở vị trí của nó. Tuy nhiên, nếu tôi đặt android:progressDrawable="@drawable/progressbar_blue_states" trong xml và thực hiện cuộc gọi setProgressDrawable() này, nó sẽ tải chính xác. Chúng ta cần setProgressDrawable để cập nhật màu sắc khi cần thiết.

Cuộc gọi này hoạt động tốt trong Android 4.0+ tuy nhiên trong Android 2.3, chúng tôi đang gặp sự cố. Bất kỳ ý tưởng?

Sửa

Đây là cách chúng tôi thiết lập ProgressBar trong xml:

<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

Bạn đã thử cập nhật giới hạn cho 'progressbar_blue' khi đặt nó làm tiến trình có thể vẽ được không? – Luksprog

+0

Bạn có nghĩa là thiết lập số tiền tiến bộ? Nếu vậy, chúng tôi làm điều đó ngay lập tức sau khi thiết lập drawable. – jbenowitz

+0

Nếu bạn có nghĩa là giới hạn bố trí, hãy làm điều đó trong xml, mà tôi đã thêm ở trên. – jbenowitz

Trả lời

8

Tôi đã có lỗi tương tự, nhưng nó đã được giải quyết bằng cách sử dụng this answer

này phương tiện có một bộ mới có thể vẽ được trên thanh tìm kiếm, nhưng kích thước của hình vẽ là 0, bạn sẽ không thấy gì cả.

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

Cảm ơn bạn! Tôi đã có cùng một vấn đề và đây là giải pháp. – ssawchenko

2

Theo bài này https://stackoverflow.com/a/6953534/3223742

một giải pháp tốt là để thiết lập tiến độ 1; đặt lại tiến độ tối đa và sau đó đặt tiến độ thực tế:

progressBar.setProgressDrawable(...); 
progressBar.setProgress(1); 
progressBar.setMax(maxProgress); 
progressBar.setProgress(progress); 
Các vấn đề liên quan