Android: створити спливаюче вікно, яке має кілька варіантів вибору


109

Я шукав навколо, намагаючись зрозуміти, як створити спливаюче вікно або діалогове вікно, у якому є 4 варіанти на вибір.

Я бачу цю картину на веб-сайті для розробників Android:

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

Хтось знає, як закодувати щось на зразок того, що праворуч? Мені не потрібні піктограми поруч із моїм текстом, мені просто потрібно мати можливість вибрати з чотирьох варіантів.

Відповіді:


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):

Вихід

(Довідкова карта не включена.;))


5
.create()тут непотрібно, .show()поверне діалогове вікно, створене будівельником, а також покаже його
TronicZomB

2
Дуже дякую за це. Я дійсно не хотів реалізувати макет xml для простого текстового меню і не міг знайти простий спосіб зробити це, поки я не натрапив на цю публікацію.
Крістофер Ратхеб

Як ми можемо посередити цей текст і чи можна встановити колір у цьому тексті? наприклад, червоний показує червоний колір ?? зелений текст відображається зеленим кольором?
Ахмад Арслан

Примітка: цей приклад не є багаторазовим, прочитайте ще раз підзаголовок з поста :)

Привіт, чи можете ви також показати, як я можу встановлювати дії для певного вибору предмета? Приклад. Я хочу дозволити користувачеві змінювати мову програми, натиснувши один із цих елементів (можливо, використовуючи оператор if).
Арда Джебі

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

Я думаю, що перемикач (шрифт [який]) робить це.

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
Так багато покращення.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.