2013-03-20 8 views
8

Ich arbeite derzeit mit einer dynamisch aktualisierten ProgressBar. Durch bestimmte Prozentsätze setzt der Fortschrittsbalken ein Zeichen einer anderen Farbe. Wir haben derzeit verschiedene farbige Clip-Zeichen, die in einem Zeichen-XML definiert sind. Die eine progressbar_blue_states berechtigt ist, detailliert wie folgt:ProgressBar.setProgressDrawable funktioniert nicht für 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> 

Jedes Mal, wenn wir den Dialog aktualisieren müssen, rufen wir den folgenden Code:

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

jedoch nicht nur, dass diese die ProgressBar nicht aktualisieren, sondern auch es nimmt den Fortschrittsbalken ganz weg, wo Whitespace an seinem Platz bleibt. Wenn ich jedoch android:progressDrawable="@drawable/progressbar_blue_states" im XML-Format einstelle und diesen setProgressDrawable() Aufruf herausnehme, wird es korrekt geladen. Wir benötigen die setProgressDrawable, um die Farben nach Bedarf zu aktualisieren.

Dieser Anruf funktioniert gut in Android 4.0 +, aber in Android 2.3 laufen wir in Schwierigkeiten. Irgendwelche Ideen?

bearbeiten

Dies ist, wie wir die ProgressBar in der XML einrichten:

<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

Haben Sie versucht, die Grenzen für die 'progressbar_blue' aktualisieren, wenn es als Fortschritt ziehbar Einstellung? – Luksprog

+0

Meinst du das Einstellen der Fortschrittszahl? Wenn ja, machen wir das sofort nach dem Setzen des Zeichensatzes. – jbenowitz

+0

Wenn Sie die Layoutgrenzen meinen, tun Sie das in der XML, die ich oben hinzugefügt habe. – jbenowitz

Antwort

8

ich den gleichen Fehler erhalten haben, aber es wird gelöst durch die Verwendung this answer

Dies bedeutet, Es gibt eine neue Zeichensatz für die Suchleiste, aber die Größe der Zeichen ist 0, Sie werden nichts sehen.

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

Danke! Ich hatte das gleiche Problem und das war die Lösung. – ssawchenko

2

Nach diesem Beitrag https://stackoverflow.com/a/6953534/3223742

eine gute Lösung Fortschritt auf 1 gesetzt ist; neu eingestellt max Fortschritt, und stellen Sie dann den wirklichen Fortschritt:

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