Как установить тему в 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();
Ответ 3
Вы не можете раздуть ProgressDialog.
Что вы можете сделать, выполняя задачу async, вы можете показать пользовательский диалог, который вы можете создать, наследуя от класса Dialog.
Также см. как установить фоновое изображение для диалога прогресса?
Ответ 4
dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.item_dialog);