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

Einfach wenn ich das mache, erscheint grüner Kreis mit dem Wort loading daneben. Allerdings, wenn ich Fortschritte Dialog verwenden nicht, und ich verwende eine progressbar auf der Seite bekomme ich eine rosa Farbe, wie ich die unten in meinem styles.xmlMaterial Design progressdialog

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

definiert haben, was die Lösung ist der Kreis rosa Farbe bekommen als in der Fortschrittsleiste auf der Seite?

Antwort

11

Für API 21+ können Sie den folgenden Stil zum Einfärben des Materialfortschrittsdialogs definieren. Beachten Sie, dass dies unter values-v21 sein sollte, wenn Sie niedrigere Plattformen unterstützen.

<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"> für AppCompat ist, während <item name="android:colorAccent"> für API 21+ ist. Materialfortschrittsdialoge funktionieren nicht mit AppCompat, auch nicht mit der neuen v22.1 Support-Lib AppCompatDialog.

Sie können die Antwort von Chris Banes sehen here, die besagt, dass er Fortschrittsdialoge nicht backport wird, weil sie "ein schlechtes Muster" sind.

+0

Fair Kommentar, dass Fortschritt Dialog ist ein "schlechtes Muster". Was ist die vorgeschlagene Alternative? – Zapnologica

+5

@ Zapnologica gemäß dem Entwicklerhandbuch: [_ "Wenn Sie jedoch Lade- oder unbestimmten Fortschritt angeben müssen, sollten Sie stattdessen die Entwurfsrichtlinien für Progress & Activity befolgen und eine ProgressBar in Ihrem Layout verwenden." _] (Http://developer.android.com/guide/topics/ui/dialogs.html) anstelle eines 'ProgressDialog'. Also bette grundsätzlich irgendwo eine ProgressBar ein und verstecke/blende sie nach Bedarf ein. Ich stimme zu, dass ProgressDialog eher ein schlechtes Muster ist (vor allem wenn es nicht kündbar ist), aber ich wünschte, sie wären überall offener und klarer darüber. Vielleicht sogar in den ProgressDialog-Dokumenten erwähnen. –

+3

Der Link zu einem Kommentar zu Chris Banes Beitrag scheint nun tot zu sein. – stkent

2

Diese Frage ist ein bisschen alt, aber wenn Sie AppCompat verwenden, fügen Sie einfach dieses Attribut:

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

In Ihrem Stil

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

hoffe, das hilft!