具有一个、两个和三个按钮的Android警报对话框

39

我不经常创建警报,但每次创建时都需要花费一段时间阅读文档并弄清楚如何创建。由于我现在已经多次这样做过,所以我会在下面写出一个答案作为日后参考。具体来说,我想比较以下基本代码:

  • 一个按钮(确定)
  • 两个按钮(确定和取消)
  • 三个按钮(积极、消极和其他)

将这三种常见的警报类型的基本代码放在一个地方供未来易于参考和修改。 此问题询问如何针对一个按钮创建警报。

1个回答

146

一个按钮

在这里输入图像描述

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();
    }
}
如果按钮文本过长,超出水平空间,则按钮将自动在三个垂直列中布置。 enter image description here

处理按钮点击

在上面的示例中,OnClickListenernull。 您可以替换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方法。那里没有什么特别之处。

另请参阅


我需要传递哪个视图到对话框? - Eduardo Lion
@Eduardo Lion,我想你指的是showAlertDialogButtonClicked(View view)中的view。那只是来自按钮的onClick()方法的Button。您可以忽略它。对话框根本不使用它。对话框只需要上下文,这种情况下是this,也就是Activity。 - Suragch
我在纵向布局和你的三个按钮示例中遇到了问题。按钮之间的空间不够大。我该如何修改布局?主要问题是按钮文本长度似乎对默认布局来说太长了。 - testing
@testing,抱歉,自从转向Flutter后,我已经有几年没有处理Android警报对话框了,所以如果我曾经知道你的问题的答案,现在我已经忘记了。 - Suragch
1
@Suragch:感谢您的回复。最终,我在我的android:alertDialogTheme中为我的android:buttonBarButtonStyle添加了一个<item name="android:padding">10dp</item>。看起来可以工作了。 - testing
@testing,很高兴你解决了问题。感谢你添加评论以帮助其他遇到同样问题的人。 - Suragch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接