2015-02-15 10 views
15
alertDialog = new ProgressDialog(this);       
alertDialog.setMessage(getResources().getString(R.string.loader)); 
alertDialog.setCancelable(false); 
alertDialog.show(); 

Semplicemente quando lo faccio, il cerchio verde si presenta con la parola che si sta caricando oltre. Tuttavia quando non uso finestra di avanzamento, e io uso un ProgressBar sulla pagina ottengo un colore rosa come ho definito il seguito della mia styles.xmlMaterial design progressdialog

<item name="colorPrimary">@color/pink</item> 
<item name="colorPrimaryDark">@color/pink</item> 
<item name="colorAccent">@color/pink</item> 

Qual è la soluzione di ottenere il colore rosa, cerchio come nella barra di avanzamento sulla pagina?

risposta

11

Per API 21+ è possibile definire il seguente stile per colorare la finestra di avanzamento del materiale. Si noti che questo dovrebbe essere sotto values-v21 se si supportano piattaforme inferiori.

<style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
    <item name="android:alertDialogTheme">@style/MyAlertDialog</item> 
</style> 

<style name="MyAlertDialog" parent="android:Theme.Material.Light.Dialog.Alert"> 
    <item name="android:colorAccent">@color/pink</item> 
</style> 

<item name="colorAccent"> è per AppCompat che <item name="android:colorAccent"> è per API 21+. Le finestre di dialogo di avanzamento materiale non funzionano con AppCompat, anche con il nuovo supporto v22.1 lib AppCompatDialog.

È possibile vedere la risposta di Chris Banes here affermando che non eseguirà il backport dei Dialoghi di avanzamento perché sono "uno schema errato".

+0

Commento equo che il dialogo di avanzamento è un "modello errato". Qual è l'alternativa suggerita? – Zapnologica

+5

@Zapnologica secondo la guida per lo sviluppatore: [_ "Tuttavia, se è necessario indicare il caricamento o l'avanzamento indeterminato, è necessario seguire le linee guida di progettazione per Progresso e attività e utilizzare una barra di avanzamento nel layout." _] (Http://developer.android.com/guide/topics/ui/dialogs.html) invece di un 'ProgressDialog'. Quindi, in pratica, incorpora un 'ProgressBar' da qualche parte e nascondilo/scoprilo se necessario. Sono d'accordo che ProgressDialog tende a essere un cattivo modello (specialmente se non annullabile), ma vorrei che fossero più precisi e chiari su di esso ovunque. Forse nemmeno menzionarlo nei documenti di ProgressDialog. –

+3

Il link a un commento sul post di Chris Banes ora sembra morto. – stkent

2

questa domanda è un po 'vecchio, ma se si utilizza AppCompat, Basta aggiungere questo attributo:

<item name="android:tint">@color/my_color_accent</item> 

Nel tuo stile

<style name="MaterialDialog" parent="Theme.AppCompat.Light.Dialog"> 
    <item name="android:tint">@color/my_color_accent</item> 
</style> 

Spero che questo aiuti!