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

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

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

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

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

Одна кнопка

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

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 выше примерах 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(); } } 

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

Заметки

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

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

Смотрите также

  • Как отключить положительную кнопку
  • Используйте тосты, а не предупреждение для коротких сообщений
  • Список одного выбора, список переключателей и список флажков
  • Как реализовать пользовательский вид AlertDialog
  • Программно перейдите к определенной позиции в Android ListView
  • Почему добавление OnClickListener внутри onBindViewHolder из RecyclerView.Adapter считается плохой практикой?
  • Заставить камеру всегда открывать в портретном режиме в android
  • Android: Как я могу помешать мягкой клавиатуре выдвинуть мой взгляд?
  • Как отображать длинные сообщения в logcat
  • Слушайте входящие сообщения / уведомления Whatsapp
  • Расположение Apk в новой Android-студии
  • Отправьте данные обратно в скрипт, который начал работу с помощью оболочки adb am start
  • Android, как получить доступ к исходным ресурсам, которые я установил в папку res?
  • Цвет монитора ListView для Android
  • Как запрашивать разрешения от службы в Android Marshmallow
  • Interesting Posts

    Как интегрировать OpenCV Manager в Android-приложение

    Связывание ComboBox SelectedItem с использованием MVVM

    Добавить текст / метку на ссылки в графе D3 force

    Получение местоположения элемента управления, относящегося ко всему экрану?

    Где хранятся пароли Windows 7?

    Узел имени находится в безопасном режиме. Не в состоянии уйти

    Построение нескольких временных рядов на одном и том же участке с использованием ggplot ()

    Несколько аргументов функции, вызванной pthread_create ()?

    Передача переменных в другую функцию, которая принимает список переменных аргументов

    Каков наилучший способ решения конфликта объектов Objective-C?

    Графические линии и групповая эстетика в ggplot2

    java.io.WriteAbortedException: запись прерывается; java.io.NotSerializableException

    Почему вычитание «0» в C приводит к числу, которое представляет символ?

    Вертикальная линия с использованием XML-drawable

    Почему Google называет Thunderbird «менее безопасным»?

    Давайте будем гением компьютера.