2012-07-23 52 views
35

Khi tôi sử dụng trong cách bố trí, trong đó quy định cụ thể thoại android:layout_width="match_parent" này tôi nhận được hộp thoại này:Làm thế nào để tạo ra hộp thoại sẽ được đầy đủ trong chiều ngang

small dialog

Tôi cần thoại mà sẽ rộng hơn. Bất kỳ ý tưởng?

+0

gửi mã layout xml của bạn và cố gắng lấp đầy giá trị cha mẹ thay vì trận đấu mẹ – rajpara

+2

@ rajpara 'fill_parent' và' match_parent' làm * chính xác * cùng một điều (cả hai đều là hằng số có giá trị '-1') – Eborbob

Trả lời

120

Bạn có thể làm điều đó bằng cách lấy đối tượng Window mà hộp thoại sử dụng và đặt lại chiều rộng. Dưới đây là ví dụ đơn giản:

//show the dialog first 
AlertDialog dialog = new AlertDialog.Builder(this) 
     .setTitle("Test Dialog") 
     .setMessage("This should expand to the full width") 
     .show(); 
//Grab the window of the dialog, and change the width 
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(); 
Window window = dialog.getWindow(); 
lp.copyFrom(window.getAttributes()); 
//This makes the dialog take up the full width 
lp.width = WindowManager.LayoutParams.MATCH_PARENT; 
lp.height = WindowManager.LayoutParams.WRAP_CONTENT; 
window.setAttributes(lp); 

Đây là kết quả cuối cùng. Lưu ý rằng có nhiều kiểu dáng hơn bạn có thể làm cho hộp thoại nếu bạn cần tinh chỉnh mọi thứ (như thay đổi nền, v.v.). Khi tôi đã phải làm điều này trong quá khứ, tôi thường sử dụng phương pháp này và tùy chỉnh bố cục được sử dụng trong hộp thoại với setView() trên lớp trình tạo.

example

+2

Chỉ cần nhớ rằng điều này có thể trông trange trên màn hình lớn, chẳng hạn như máy tính bảng chẳng hạn. – wsanville

+1

Điều gì xảy ra nếu lớp của tôi mở rộng Ứng dụng và tôi muốn gọi alertdialog trong đó? – ManishSB

+1

Nếu sử dụng DialogFragment, cài đặt phải được thực hiện theo phương thức 'onStart', xem http://stackoverflow.com/questions/23990726/how-to-make-dialogfragment-width-to-fill-parent/26207535 – Eborbob

3

Một cách khác để khắc phục điều này là sử dụng:

import android.support.v7.app.AlertDialog; 

thay vì:

import android.app.AlertDialog; 
+0

Giải pháp đơn giản, nhanh nhất và tốt nhất. Đây sẽ là câu trả lời được chấp nhận. – PerracoLabs

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