Диалоговое окно Android Alert с одной, двумя и тремя кнопками

Я не делаю оповещения очень часто, но каждый раз, когда я это делаю, мне требуется некоторое время, чтобы прочитать документацию и выяснить, как сделай это. Поскольку я должен был сделать это несколько раз сейчас, я собираюсь написать ответ ниже, что я могу вернуться в будущем. В частности, я хочу сравнить базовый код для

  • Одна кнопка (OK)
  • Две кнопки (ОК и Отмена)
  • Три кнопки (положительные, отрицательные, прочие)

Было бы неплохо иметь базовый код для этих трех общих типов предупреждений в одном месте для упрощения ссылок и модификации в будущем. Этот вопрос спрашивает, как сделать это за одну кнопку.

Я добавляю свой ответ ниже.

Ответ 1

Одна кнопка

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

import android.support.v7.app.AlertDialog;

public class MainActivity extends AppCompatActivity {

    public void showAlertDialogButtonClicked(View view) {

        // setup the alert builder
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("My title");
        builder.setMessage("This is my message.");

        // add a button
        builder.setPositiveButton("OK", null);

        // create and show the alert dialog
        AlertDialog dialog = builder.create();
        dialog.show();
    }
}

Две кнопки

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

public class MainActivity extends AppCompatActivity {

    public void showAlertDialogButtonClicked(View view) {

        // setup the alert builder
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("AlertDialog");
        builder.setMessage("Would you like to continue learning how to use Android alerts?");

        // add the buttons
        builder.setPositiveButton("Continue", null);
        builder.setNegativeButton("Cancel", null);

        // create and show the alert dialog
        AlertDialog dialog = builder.create();
        dialog.show();
    }
}

Три кнопки

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

public class MainActivity extends AppCompatActivity {

    public void showAlertDialogButtonClicked(View view) {

        // setup the alert builder
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Notice");
        builder.setMessage("Launching this missile will destroy the entire universe. Is this what you intended to do?");

        // add the buttons
        builder.setPositiveButton("Launch missile", null);
        builder.setNeutralButton("Remind me later", null);
        builder.setNegativeButton("Cancel", null);

        // create and show the alert dialog
        AlertDialog dialog = builder.create();
        dialog.show();
    }
}

Если текст кнопки слишком длинный, чтобы все поместилось по горизонтали, тогда оно автоматически будет выложено в вертикальном столбце из трех кнопок.

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

Обращение с кликами по кнопкам

В приведенных выше примерах OnClickListener был null. Вы можете заменить null на прослушиватель, чтобы что-то сделать, когда пользователь нажал кнопку. Например:

builder.setPositiveButton("Launch missile", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {

        // do something like...
        launchMissile();
    }
});

Включение

Существует много вариантов диалогов, которые вы можете сделать. См. Документацию для справки.

Поскольку в AlertDialog поддерживается только три кнопки, вот пример диалога со списком.

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

public class MainActivity extends AppCompatActivity {

    public void showAlertDialogButtonClicked(View view) {

        // setup the alert builder
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Choose an animal");

        // add a list
        String[] animals = {"horse", "cow", "camel", "sheep", "goat"};
        builder.setItems(animals, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                switch (which) {
                    case 0: // horse
                    case 1: // cow
                    case 2: // camel
                    case 3: // sheep
                    case 4: // goat
                }
            }
        });

        // create and show the alert dialog
        AlertDialog dialog = builder.create();
        dialog.show();
    }
}

См. этот ответ для похожих примеров списка переключателей и списка флажков.

Примечания

  • Используйте строковые ресурсы, а не жестко закодированные строки.
  • Вы можете обернуть все в класс, который расширяет DialogFragment для легкого повторного использования диалога. (См. этот для справки.)
  • В этих примерах использовалась библиотека поддержки для поддержки версий до API 11. Таким образом, импорт должен быть

    import android.support.v7.app.AlertDialog;
    
  • Я пропустил метод onCreate в приведенных выше примерах для краткости. Там ничего особенного не было.

См. также