2013-06-04 28 views
15

Chciałbym ustawić temat progressDialog. Aby ją stworzyć, używam tego kodu:Jak ustawić kompozycję do ProgressDialog?

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

Nie mogę tylko napisać

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

ponieważ metoda show() jest statyczny i dostaję ostrzeżenie kompilatora. Czy istnieje jakiś sposób, aby wykorzystać dostępne stałych jak

progressDialog.THEME_HOLO_DARK 

ustawić motyw dialogowe?

Chciałbym również zmienić tło dialogowe i zrobić rogi wokół (nie chcę niczego zmieniać z paskiem postępu, który jest wewnątrz progressDialog, jest tutaj wiele tutoriali, ale zazwyczaj opisują one sposób tworzenia nowej klasy który rozszerza klasę progressDialog.

Czy istnieje prostszy sposób ustawić motyw i kolor tła progressDialog?
Dlaczego mogę uzyskać dostęp do stałych jak progressDialog.THEME_HOLO_DARK jeśli ja nie mogę ich używać?

+0

Nie można nadmuchać postępu Dialog UI, co można zrobić, to robiąc Async zadanie, można pokazać niestandardowego dialogowe – Adil

+0

Adil Mughal mógłbyś napisać odpowiedź w jaki sposób mogę dokonać customProgressDialog tylko z tematu, TLE i narożniki zmodyfikowany? Nie chcę dotykać paska postępu ... – Marek

+0

@Marek: nie można nadmuchać układu okna dialogowego Postępu (wspomnianego powyżej przez Adila Mughala), trzeba użyć niestandardowego okna dialogowego (nie jest to okno niestandardowego progu). możesz utworzyć proste okno dialogowe i dostosować je do swoich wymagań. –

Odpowiedz

28

ProgressDialog.show() są metody statyczne, więc nie dostaniesz instancję klasy ProgressDialog które można ustawić właściwości dalej.

Aby uzyskać ProgressDialog instancję:

// 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: Jeśli chodzi o komentarze na temat nieaktualnych tematów, można również użyć styles.xml i dziedziczyć z tematem bazowej, np:

<style name="MyProgressDialog" parent="Theme.AppCompat.Dialog"> 
</style> 

Szczegółowe informacje na temat tego, jak to zrobić są już szeroko omówione w innym miejscu, zaczynając od https://developer.android.com/guide/topics/ui/themes.html.

Używanie themes i styles.xml jest (moim zdaniem) znacznie czystszym i łatwiejszym w utrzymaniu rozwiązaniem niż trudne kodowanie tematu podczas tworzenia ProgressDialog, tj. Ustawienie go raz i zapomnienie.

Następnie można po prostu zrobić

new ProgressDialog(mContext); 

i pozwól temat/styl globalny zapewnić stylizacji.

+2

Motyw jest obecnie przestarzały. Czego jeszcze możemy użyć? – user2520215

+0

^To samo pytanie. Nie znalazłem nic w dokumentach –

0

nie można nadmuchać progressDialog.

Co można zrobić podczas wykonywania zadania asynchronicznego, można wyświetlić niestandardowe okno dialogowe, które można utworzyć, dziedzicząc z klasy okna dialogowego.

zobaczyć również 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

Przepraszam .. Pracuję teraz. Nie mogę podać wszystkich szczegółów. Ale oto jest odpowiedź.

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

nie działa dla mnie –

+0

Dzięki za ContextThemeWrapper :) –

+0

nie działa dla mnie albo – Mike6679