/ / ProgressBar.setProgressDrawable nie działa dla Androida 2.3 - Android

ProgressBar.setProgressDrawable nie działa dla systemu Android 2.3 - Android

Obecnie pracuję z aktualizacją dynamiczną ProgressBar. Na podstawie określonych wartości procentowych pasek postępu ustawia rysunek w innym kolorze. Obecnie mamy różne kolorowe klipsy do rysowania zdefiniowane w xml do rysowania. Ten zatytułowany progressbar_blue_states jest szczegółowo opisany w następujący sposób:

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

Ilekroć musimy zaktualizować okno dialogowe, wywołujemy następujący kod:

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

Jednak nie tylko to nie aktualizuje paska postępu, ale także całkowicie usuwa pasek postępu, w którym jest miejsce białych znaków. Jeśli jednak ustawię android:progressDrawable="@drawable/progressbar_blue_states" w xml i wyjmij to setProgressDrawable() zadzwoń, ładuje się poprawnie. Potrzebujemy setProgressDrawable, aby w razie potrzeby zaktualizować kolory.

To połączenie działa dobrze w Androidzie 4.0+, jednak w Androidzie 2.3 mamy problemy. Masz jakieś pomysły?

Edytować

Oto jak skonfigurowaliśmy pasek postępu w pliku 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" />

Odpowiedzi:

8 dla odpowiedzi № 1

Mam ten sam błąd, ale można go rozwiązać za pomocą ta odpowiedź

Oznacza to, że na pasku wyszukiwania znajduje się nowy zestaw do rysowania, ale jego rozmiar wynosi 0, nic nie zobaczysz.

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

2 dla odpowiedzi nr 2

Zgodnie z tym postem https://stackoverflow.com/a/6953534/3223742

dobrym rozwiązaniem jest ustawienie postępu na 1; ponownie ustaw maksymalny postęp, a następnie ustaw rzeczywisty postęp:

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