2012-03-09 25 views

Trả lời

8

Chắc chắn, bạn có thể sử dụng Dialog.setContentView() để đặt nội dung của hộp thoại thành bố cục tùy ý.

Dialog dialog = new Dialog(this); 
    dialog.setContentView(R.layout.yourLayoutId); 
    dialog.show(); 

Hãy cho mình một file layout với một LinearLayout dọc có các nút bạn muốn trong nó và gọi setContentView trên hộp thoại của bạn, đi qua các tên của file layout của bạn.

Nếu bạn là deadset trên AlertDialog bạn có thể làm điều gì đó tương tự với builder.setView()

LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View layout = inflater.inflate(R.layout.yourLayoutId, (ViewGroup) findViewById(R.id.yourLayoutRoot)); 
    AlertDialog.Builder builder = new AlertDialog.Builder(this) 
    .setView(layout); 
    AlertDialog alertDialog = builder.create(); 
    alertDialog.show(); 
+0

Hoàn hảo ... cảm ơn bạn! – Ahmed

6

Hiện đã có một setItems() gọi mà thực hiện điều này kể từ mức API 1. Không có lý do để tạo ra một tùy chỉnh hộp thoại trừ khi bạn muốn thay đổi giao diện của các mục.

CharSequence[] items = {"Foo", "Bar", "FooBar"}; 
new AlertDialog.Builder(activity) 
.setTitle("Choose a widget") 
.setItems(items, new DialogInterface.OnClickListener() 
{ 
    @Override 
    public void onClick(DialogInterface dialog, int which) 
    { 
     switch(which) 
     { 
      case FOO: 
      // foo case 
      break; 

      .... 
     } 
    } 
} 
.create().show(); 
+4

Một lưu ý về điều này: bạn không thể gọi setMessage trên cảnh báo, nếu bạn làm bạn sẽ không thấy các mục. –

+1

Mã tuyệt vời. Bạn nên đề cập rằng nó tạo ra các nút dọc vì tôi nghĩ đầu tiên rằng điều này sẽ tạo ra những cái ngang. – yshahak

+0

Điểm tốt, nhưng làm cách nào để bạn tạo kiểu này? – Calin

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