Android: tạo cửa sổ bật lên có nhiều tùy chọn lựa chọn


109

Tôi đã tìm kiếm xung quanh để cố gắng tìm ra cách tạo cửa sổ bật lên hoặc hộp thoại có 4 tùy chọn để chọn.

Tôi thấy hình ảnh này trên trang web dành cho nhà phát triển Android:

nhập mô tả hình ảnh ở đây

Có ai biết làm thế nào để mã hóa một cái gì đó giống như một trong những bên phải? Tôi không cần bất kỳ biểu tượng nào bên cạnh văn bản của mình, tôi chỉ cần có thể chọn từ 4 tùy chọn.

Câu trả lời:


289

Bạn có thể tạo một Stringmảng với các tùy chọn bạn muốn hiển thị ở đó và sau đó chuyển mảng cho một AlertDialog.Builderphương thức setItems(CharSequence[], DialogInterface.OnClickListener).

Một ví dụ:

String[] colors = {"red", "green", "blue", "black"};

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Pick a color");
builder.setItems(colors, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // the user clicked on colors[which]
    }
});
builder.show();

Đầu ra (trên Android 4.0.3):

Đầu ra

(Bản đồ nền không bao gồm.;))


5
.create()ở đây là không cần thiết, .show()sẽ trả về hộp thoại được tạo bởi trình tạo và sau đó cũng hiển thị nó
TronicZomB

2
Cảm ơn bạn rất nhiều cho việc này. Tôi thực sự không muốn triển khai bố cục xml cho một menu văn bản đơn giản và không thể tìm ra cách dễ dàng để thực hiện điều này cho đến khi tôi tình cờ xem được bài đăng này.
Christopher Rathgeb

Làm thế nào chúng ta có thể giữa các văn bản này và chúng ta có thể đặt màu bên trong văn bản này? ví dụ màu đỏ cho thấy màu đỏ ?? văn bản màu xanh lá cây hiển thị màu xanh lá cây?
Ahmad Arslan

Lưu ý: ví dụ này không phải là nhiều, đọc lại tittle từ bài :)

Xin chào, bạn cũng có thể chỉ cách tôi có thể thiết lập các hành động cho các lựa chọn mặt hàng cụ thể không? Ví dụ: Tôi muốn cho phép người dùng thay đổi ngôn ngữ ứng dụng bằng cách nhấp vào một trong các mục đó (có thể sử dụng câu lệnh if).
Arda Çebi

6

Cửa sổ bật lên không có gì khác ngoài AlertDialog. Vì vậy, bạn chỉ cần tạo AlertDialog, sau đó tăng chế độ xem mong muốn của mình bằng cách sử dụng LayoutInflatervà đặt chế độ xem tăng cao bằng setView()phương phápAlertDialog


4

Thử cái này :

public void onClick(View v) {

    final String[] fonts = {
        "Small", "Medium", "Large", "Huge"
    };

    AlertDialog.Builder builder = new AlertDialog.Builder(TopicDetails.this);
    builder.setTitle("Select a text size");
    builder.setItems(fonts, new DialogInterface.OnClickListener() {@
        Override
        public void onClick(DialogInterface dialog, int which) {
            if ("Small".equals(fonts[which])) {
                Toast.makeText(TopicDetails.this, "you nailed it", Toast.LENGTH_SHORT).show();
            } else if ("Medium".equals(fonts[which])) {
                Toast.makeText(TopicDetails.this, "you cracked it", Toast.LENGTH_SHORT).show();
            } else if ("Large".equals(fonts[which])) {
                Toast.makeText(TopicDetails.this, "you hacked it", Toast.LENGTH_SHORT).show();
            } else if ("Huge".equals(fonts[which])) {
                Toast.makeText(TopicDetails.this, "you digged it", Toast.LENGTH_SHORT).show();
            }
            // the user clicked on colors[which]

        }
    });
    builder.show();
}

Tôi nghĩ rằng switch (font [mà]) đang làm điều đó.

3

LỰA CHỌN THAY THẾ

Đây là bài viết đầu tiên của tôi vì vậy tôi rất vui được chia sẻ mã của mình! Điều này đã làm việc cho tôi:

Đặt hai dòng này phía trên sự kiện OnCreate

final String[] Options = {"Red", "Blue"};
AlertDialog.Builder window;

Đặt mã này vào sự kiện sẽ kích hoạt điều này

window = new AlertDialog.Builder(this);
window.setTitle("Pick a color");
window.setItems(Options, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        if(which == 0){
           //first option clicked, do this...

        }else if(which == 1){
           //second option clicked, do this...

        }else{
        //theres an error in what was selected
            Toast.makeText(getApplicationContext(), "Hmmm I messed up. I detected that you clicked on : " + which + "?", Toast.LENGTH_LONG).show();
        }
    }
});

window.show();

1
Có nhiều cải tiến. Một câu lệnh switch cải thiện hơn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.