2013-06-04 6 views
15

Ich möchte Thema von progressDialog setzen. Um sie zu erstellen, verwende ich diesen Code:Wie man das Thema auf ProgressDialog setzt?

progressDialog = ProgressDialog.show(this, "Please Wait", "Loading dictionary file....", true, false); 

kann ich nicht nur

progressDialog = new ProgressDialog(...); 
progressDialog.(do_sth_with_dialog); 
progressDialog.show(...) 

schreiben, weil die Show() Methode statisch ist und ich Compiler Warnung. Gibt es eine Möglichkeit zur Verfügung Konstanten zu verwenden, wie

progressDialog.THEME_HOLO_DARK 

das Dialog Thema einstellen?

Ich möchte auch den Dialog Hintergrund ändern und die Ecken runden (Ich möchte nichts mit der Fortschrittsbalken ändern, die in progressDialog ist. Es gibt viele Tutorials hier, aber sie beschreiben in der Regel, wie neue Klasse erstellen dass sie progressDialog Klasse.

gibt es einfache Weise THEMA und Hintergrundfarbe von progressDialog zu setzen?
Warum ich Konstanten wie progressDialog.THEME_HOLO_DARK zugreifen, wenn ich kann sie nutzen?

+0

Sie können keine Fortschritte Dialog UI aufzublasen, was Sie tun können, ist während Async Aufgabe zu tun, können Sie benutzerdefinierte Dialog – Adil

+0

Adil Mughal zeigen könnten Sie bitte in der Antwort schreiben wie kann ich customProgressDialog mit nur Thema, Hintergrund und CORNERS machen geändert? Ich möchte nicht die ProgressBar berühren ... – Marek

+0

@Marek: Sie können das Layout von Progress Dialog nicht aufblasen (das oben von Adil Mughal erwähnt) müssen Sie benutzerdefinierte Dialog verwenden (nicht benutzerdefinierte Progressdialog). Sie können einen einfachen Dialog erstellen und ihn entsprechend Ihren Anforderungen anpassen. –

Antwort

28

ProgressDialog.show() statische Methoden sind, so dass Sie nicht eine Klasseninstanz von ProgressDialog erhalten, die Sie Eigenschaften auf einstellen.

// create a ProgressDialog instance, with a specified theme:  
ProgressDialog dialog = new ProgressDialog(mContext, ProgressDialog.THEME_HOLO_DARK); 
// set indeterminate style 
dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
// set title and message 
dialog.setTitle("Please wait"); 
dialog.setMessage("Loading dictionary file..."); 
// and show it 
dialog.show(); 

EDIT 8/2016:

Um eine ProgressDialog Instanz erhalten In Bezug auf die Kommentare zu veralteten Themen, auch styles.xml und erben von einer Basis Thema verwenden, zB:

Die Details dazu sind bereits an anderer Stelle ausführlich behandelt, beginnen Sie mit https://developer.android.com/guide/topics/ui/themes.html.

Verwenden von themes und styles.xml ist (meiner Meinung nach) eine viel sauberere und einfacher zu wartende Lösung als hartes Codieren eines Themas beim Instanziieren des ProgressDialogs, d. H. Einmal einstellen und vergessen.

Dann können Sie einfach tun

new ProgressDialog(mContext); 

und lassen Sie Ihre globalen Thema/style das Styling bieten.

+2

Das Thema ist jetzt veraltet. Was können wir noch verwenden? – user2520215

+0

^Gleiche Frage. Ich habe nichts in der Dokumentation gefunden –

0

Sie können nicht progressDialog aufzuzublasen.

Sie können während einer asynchronen Aufgabe einen benutzerdefinierten Dialog anzeigen, den Sie erstellen können, indem Sie von der Dialog-Klasse übernehmen.

Siehe auch how to set background image for progress dialog?

0
dialog = new Dialog(this); 
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
dialog.setContentView(R.layout.item_dialog); 
11

Entschuldigung .. Ich arbeite gerade. Kann nicht alle Details angeben. Aber hier ist die Antwort.

ProgressDialog progressDialog; 

if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB){ 
    progressDialog = new ProgressDialog(new ContextThemeWrapper(context, android.R.style.Theme_Holo_Light_Dialog)); 
}else{ 
    progressDialog = new ProgressDialog(context); 
} 

progressDialog.setMessage("Loading...."); 
progressDialog.show(); 
+0

funktioniert nicht für mich –

+0

Danke für ContextThemeWrapper :) –

+0

funktioniert auch nicht für mich – Mike6679