2013-07-22 1 views
8

Sto cercando di fare aggiungere un ProgressBar nel codice e renderlo determinato:Come rendere Android ProgressBar determinato nel codice?

progressBar = new ProgressBar(getActivity()); 
progressBar.setLayoutParams(layoutParams); 
parent.addView(progressBar, index); 
progressBar.setId(id.list_item_secondary); 
progressBar.setProgressDrawable(getResources().getDrawable(drawable.progress_horizontal)); 
progressBar.setIndeterminate(false); 
progressBar.setMax(100); 

Dopo progressBar.setIndeterminate(false), isIndeterminate è ancora vero e il progresso mantiene mostra il cerchio indeterminato.

Come posso determinarlo?

risposta

2

dal codice sorgente ProgressBar here, il costruttore che si sta chiamando è in linea 237, che sta chiamando il costruttore in linea 241 che a sua volta chiama il costruttore in linea 245 con lo stile:

com.android.internal.R.attr.progressBarStyle 

Questo style ha l'attributo android: indeterminateOnly impostato su true per impostazione predefinita in modo che le chiamate a setIndeterminate vengano ignorate. Vedere la descrizione della funzione alla linea 433.

non ho fatto questo, ma suppongo che se si chiama il costruttore in linea 245 in questo modo:

progressBar = new ProgressBar(getActivity(), null, <Your Style ID>); 

passando come terzo parametro di definizione di stile con Android : indeterminateOnly to false dovrebbe funzionare. Basato sul codice sorgente presumo che setIndeterminate sia lì solo per abilitarlo e non per disabilitarlo.

Spero che questo aiuti ...

+0

Sai di uno stile del genere nel framework di Android? –

+0

@kilaka Penso che android.R.style.Widget_ProgressBar_Horizontal farà il lavoro ... – Christos

+0

Non è stato abbastanza. Ho dovuto impostare il progresso drawable: 'progressBar.setProgressDrawable (getResources(). GetDrawable (android.R.drawable.progress_horizontal))' –

-1

Provare anche a utilizzare setProgress(), che accetta un argomento intero compreso tra zero e getMax().

+0

Già provato. Non ha funzionato Perché pensi che questo dovrebbe funzionare? –

1

Non sembra che si stia impostando l'attributo di stile di ProgressBar. Da the docs per setIndeterminate():

Se lo stile di questa barra di avanzamento supporta solo la modalità indeterminata (come ad esempio le barre di avanzamento circolari), allora questo verrà ignorato.

È necessario impostare manualmente lo stile, ad es. via style="@android:style/Widget.ProgressBar.Horizontal". Cambiare semplicemente lo Drawable non è sufficiente.

+0

Quindi, come posso impostare lo stile della barra di avanzamento? –

+0

Puoi impostarlo nel costruttore, in questo modo: http://stackoverflow.com/a/3765577/752320 – Geobits

+0

Meglio ancora, usa 'style ="? Android: progressBarStyleHorizontal "' per riprendere lo stile dato dal tema. – nmr

0

Il tuo stile ProgressBar predefinito ha Android: indeterminateOnly impostato su true. Quindi non puoi cambiare lo stato indeterminato di ProgressBar. source code.

+0

Quindi, come posso determinarlo? –

+0

Hai visto la fonte? Non c'è modo) Usa lo stile corretto nel costruttore. @Geobits ha ragione. – Leonidos