带有一个,两个和三个按钮的Android Alert对话框

Android Alert Dialog with one, two, and three buttons

我不经常发出警报,但每次我这样做都需要一段时间来阅读文档并弄清楚如何去做。 由于我现在必须这样做几次,我将在下面写下一个答案,我将来可以回来。 具体来说,我想比较基本代码

  • 一键(OK)
  • 两个按钮(确定和取消)
  • 三个按钮(正面,负面,其他)

将这三种常见警报类型的基本代码放在一个位置以便将来进行简单参考和修改将会很不错。 这个问题询问如何为一个按钮执行此操作。

我在下面添加我的答案。


一键

enter image description here

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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();
    }
}

两个按钮

enter image description here

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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();
    }
}

三个按钮

enter image description here

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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();
    }
}

如果按钮文本太长而不能全部水平放置,那么它将自动布局在三个按钮的垂直列中。

enter image description here

处理按钮单击

在上面的例子中,OnClickListenernull。当用户点击按钮时,您可以用侦听器替换null来执行某些操作。例如:

1
2
3
4
5
6
7
8
builder.setPositiveButton("Launch missile", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {

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

继续

您可以制作更多种类的对话框。请参阅文档以获取相关帮助。

由于AlertDialog中仅支持三个按钮,因此这是带有列表的对话框的示例。

enter image description here

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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之前的版本。因此导入应该是

    1
    import android.support.v7.app.AlertDialog;
  • 为简洁起见,我在上面的例子中省略了onCreate方法。那里没什么特别的。

也可以看看

  • 如何禁用正面按钮
  • 对于短消息,请使用Toast而不是Alert
  • 单选列表,单选按钮列表和复选框列表
  • 如何实现自定义AlertDialog视图