Android Alert Dialog с одной, двумя и тремя кнопками
Я не делаю оповещения очень часто, но каждый раз, когда я делаю это, мне нужно время, чтобы прочитать документацию и понять, как это сделать. Поскольку мне пришлось делать это несколько раз сейчас, я собираюсь написать ответ ниже, к которому я смогу вернуться в будущем. В частности, я хочу сравнить основной код для
- Одна кнопка (ОК)
- Две кнопки (ОК и Отмена)
- Три кнопки (положительный, отрицательный, другой)
Было бы неплохо иметь базовый код для этих трех распространенных типов оповещений в одном месте, чтобы их можно было легко найти и изменить в будущем. Этот вопрос спрашивает, как это сделать за одну кнопку.
Я добавляю свой ответ ниже.
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
Метод в примерах выше для краткости. Там не было ничего особенного.