2013-03-20 13 views
8

Attualmente sto lavorando con un aggiornamento dinamico ProgressBar. Attraverso certe percentuali, la barra progess imposta un drawable di un colore diverso. Al momento sono disponibili vari disegni a clip colorati definiti in un xml estraibile. Quello intitolato progressbar_blue_states è dettagliata come segue:ProgressBar.setProgressDrawable non funziona per 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> 

Ogni volta che abbiamo bisogno di aggiornare la finestra di dialogo, che noi chiamiamo il seguente codice:

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

Tuttavia, non solo questo non aggiorna il ProgressBar, ma anche elimina completamente la barra di avanzamento dove gli spazi vengono lasciati al suo posto. Tuttavia, se imposto android:progressDrawable="@drawable/progressbar_blue_states" nell'xml ed estrai questa chiamata setProgressDrawable(), viene caricata correttamente. Abbiamo bisogno di setProgressDrawable per aggiornare i colori secondo necessità.

Questa chiamata funziona correttamente in Android 4.0 e versioni successive, tuttavia in Android 2.3 ci sono alcuni problemi. Qualche idea?

Modifica

In questo modo abbiamo istituito il ProgressBar nel 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

Hai provato ad aggiornare i limiti per il 'progressbar_blue' quando lo si imposta come il progresso drawable? – Luksprog

+0

Intendi impostare l'importo del progresso? Se è così, lo facciamo subito dopo aver impostato il drawable. – jbenowitz

+0

Se intendi i limiti del layout, fallo nell'xml, che ho aggiunto sopra. – jbenowitz

risposta

8

ho avuto lo stesso problema, ma è risolto utilizzando this answer

Questo significa c'è un nuovo set disegnabile alla barra di ricerca, ma la dimensione del drawable è 0, non vedrai nulla.

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

Grazie! Ho avuto lo stesso problema e questa era la soluzione. – ssawchenko

2

Secondo questo post https://stackoverflow.com/a/6953534/3223742

una buona soluzione è impostare progresso a 1; re-impostare il progresso massimo e quindi impostare il progresso reale:

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