Как установить тему в ProgressDialog?

Я хотел бы задать тему progressDialog. Чтобы создать его, я использую этот код:

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

Я не могу просто написать

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

потому что метод show() является статическим, и я получаю предупреждение о компиляторе. Есть ли способ использовать доступные константы, такие как

progressDialog.THEME_HOLO_DARK 

чтобы задать тему диалога?

Я также хотел бы изменить фон "Диалог" и сделать углы круглыми (я не хочу ничего менять с помощью progressBar, который находится внутри progressDialog. Здесь много учебников, но обычно они описывают, как создать новый класс, который расширяет класс progressDialog.

Есть ли более простой способ установить THEME и BACKGROUND цвет прогрессаDialog?
Почему я могу получить доступ к константам, например progressDialog.THEME_HOLO_DARK, если я их не могу использовать?

Ответы

Ответ 1

ProgressDialog.show() являются статическими методами, поэтому вы не получите экземпляр класса ProgressDialog, на который вы можете установить свойства.

Чтобы получить экземпляр ProgressDialog:

// 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: Что касается комментариев об устаревших темах, вы также можете использовать styles.xml и наследовать от базовой темы, например:

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

подробности о том, как это сделать, уже широко освещаются в другом месте, начинаются с https://developer.android.com/guide/topics/ui/themes.html.

Использование тем и styles.xml(на мой взгляд) гораздо более чистое и удобное в обслуживании решение, чем жесткое кодирование темы при создании экземпляра ProgressDialog, т.е. установить его один раз и забыть.

Тогда вы можете просто сделать

new ProgressDialog(mContext);

и пусть ваша глобальная тема/стиль обеспечит стиль.

Ответ 2

Извини, я сейчас работаю. Невозможно дать полную информацию. Но вот ответ.

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();

Ответ 4

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