2013-06-04 39 views
15

Tôi muốn đặt chủ đề của tiến trìnhDialog. Để tạo ra nó, tôi sử dụng mã này:Cách đặt chủ đề thành ProgressDialog?

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

tôi không thể chỉ cần viết

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

vì phương pháp hiển thị() là tĩnh và tôi nhận được cảnh báo trình biên dịch. Có cách nào để sử dụng các hằng số có sẵn như

progressDialog.THEME_HOLO_DARK 

để đặt chủ đề hộp thoại?

Tôi cũng muốn thay đổi nền hộp thoại và làm cho các góc tròn (tôi không muốn thay đổi bất cứ điều gì với progressBar đó là bên trong progressDialog. Có nhiều hướng dẫn ở đây, nhưng chúng thường mô tả cách tạo lớp mới mở rộng lớp progressDialog

. có cách dễ dàng hơn để thiết lập THEME và màu nền của progressDialog?
Tại sao tôi có thể truy cập hằng như progressDialog.THEME_HOLO_DARK nếu tôi không thể sử dụng chúng?

+0

Bạn không thể thổi phồng sự tiến bộ Dialog UI, những gì bạn có thể làm là trong khi làm Async Task, bạn có thể hiển thị tùy chỉnh thoại – Adil

+0

Adil Mughal bạn có thể xin vui lòng viết trong câu trả lời làm thế nào tôi có thể làm cho customProgressDialog chỉ với THEME, BỐI CẢNH và góc đã sửa đổi? Tôi không muốn chạm vào ProgressBar ... – Marek

+0

@Marek: bạn không thể tăng cường bố cục của Progress Dialog (được đề cập bởi Adil Mughal ở trên) bạn cần sử dụng hộp thoại tùy chỉnh (không phải hộp thoại tùy chỉnh). bạn có thể tạo một hộp thoại đơn giản và tùy chỉnh nó theo yêu cầu của bạn. –

Trả lời

28

ProgressDialog.show() là phương pháp tĩnh, vì vậy bạn không nhận được một trường hợp lớp ProgressDialog mà bạn có thể thiết lập các thuộc tính trên.

Để có được một trường hợp 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: Về các ý kiến ​​về chủ đề bị phản đối, bạn cũng có thể sử dụng styles.xml và kế thừa từ một chủ đề cơ bản, ví dụ:

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

chi tiết về cách thực hiện việc này đã được bao quát rộng rãi ở nơi khác, bắt đầu bằng https://developer.android.com/guide/topics/ui/themes.html.

Sử dụng chủ đề và styles.xml là (theo ý kiến ​​của tôi) một giải pháp sạch hơn và dễ dàng hơn nhiều so với mã hóa cứng một chủ đề khi khởi tạo ProgressDialog, tức là đặt nó một lần và quên nó.

Sau đó, bạn chỉ có thể làm

new ProgressDialog(mContext); 

và để cho chủ đề/phong cách toàn cầu của bạn cung cấp phong cách.

+2

Chủ đề không còn được dùng nữa. Chúng ta có thể sử dụng những gì khác? – user2520215

+0

^Cùng một câu hỏi. Không tìm thấy bất kỳ nội dung nào trong tài liệu –

0

Bạn không thể thổi phồng progressDialog.

Điều bạn có thể làm là khi thực hiện tác vụ không đồng bộ, bạn có thể hiển thị hộp thoại tùy chỉnh mà bạn có thể tạo bằng cách kế thừa từ lớp Dialog.

Xem thêm 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

Xin lỗi .. Tôi hiện đang làm việc. Không thể cung cấp chi tiết đầy đủ. Nhưng đây là câu trả lời.

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

không hoạt động cho tôi –

+0

Cảm ơn ContextThemeWrapper :) –

+0

không hoạt động cho tôi – Mike6679

Các vấn đề liên quan