Android: создайте всплывающее окно с несколькими вариантами выбора

109

Я искал, пытаясь понять, как создать всплывающее окно или диалоговое окно, в котором есть 4 варианта на выбор.

Я вижу эту картинку на сайте разработчика Android:

введите описание изображения здесь

Кто-нибудь знает, как кодировать что-то вроде того, что справа? Мне не нужны значки рядом с моим текстом, мне просто нужно иметь возможность выбирать из 4 вариантов.

Корноман
источник

Ответы:

289

Вы можете создать Stringмассив с параметрами, которые хотите отобразить, а затем передать массив AlertDialog.Builderв метод setItems(CharSequence[], DialogInterface.OnClickListener).

Пример:

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();

Вывод (на Android 4.0.3):

Вывод

(Фоновая карта в комплект не входит.;))

zbr
источник
5
.create()здесь .show()не
требуется
2
Большое вам спасибо за это. Я действительно не хотел реализовывать XML-макет для простого текстового меню и не мог найти простой способ сделать это, пока не наткнулся на этот пост.
Кристофер Ратгеб
Как мы можем расположить этот текст по центру и можем ли мы установить цвет внутри этого текста? например красный показывает красный цвет ?? зеленый текст отображается зеленым цветом?
Ахмад Арслан
Примечание: этот пример не является множественным, прочтите еще раз подпись из сообщения :)
Здравствуйте, не могли бы вы также показать, как я могу установить действия для выбора определенных элементов? Пример: я хочу, чтобы пользователь мог изменить язык приложения, щелкнув один из этих элементов (возможно, используя оператор if).
Arda ebi
6

Всплывающие окна - это не что иное, как. AlertDialogИтак, вам просто нужно создать AlertDialog, затем надуть желаемое представление, используя LayoutInflaterи установить надутое представление, используя setView()методAlertDialog

Вишал Павале
источник
4

Попробуй это :

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();
}
Нихил Джассал
источник
Я думаю, что switch (font [which]) делает это.
3

АЛЬТЕРНАТИВНЫЙ ВАРИАНТ

Это мой первый пост, поэтому я рад поделиться своим кодом! Это сработало для меня:

Поместите эти две строки над событием OnCreate

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

Поместите этот код в событие, которое вызовет это

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
Да, много улучшений. Оператор switch улучшает еще больше