Android:创建具有多个选择选项的弹出窗口


109

我一直在寻找解决方法,以找出如何创建弹出式窗口或具有4个选项的对话框。

我在Android开发人员网站上看到了这张照片:

在此处输入图片说明

有谁知道如何编写类似于右侧的代码?我的文字旁边不需要任何图标,我只需要能够从4个选项中进行选择即可。

Answers:


289

您可以String使用要显示的选项创建一个数组,然后AlertDialog.Builder使用方法将数组传递给setItems(CharSequence[], DialogInterface.OnClickListener)

一个例子:

String[] colors = {"red", "green", "blue", "black"};

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Pick a color");
builder.setItems(colors, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // the user clicked on colors[which]
    }
});
builder.show();

输出(在Android 4.0.3上):

输出量

(不包括背景图。)


5
.create()在这里是不必要的,.show()将返回由构建器创建的对话框,然后也将其显示
TronicZomB

2
非常感谢你。我真的不想为简单的文本菜单实现xml布局,并且在我偶然发现这篇文章之前,找不到一种简单的方法来做到这一点。
Christopher Rathgeb 2014年

我们如何才能将这些文本居中,并可以在文本内部设置颜色?例如红色显示红色?绿色文本显示为绿色?
艾哈迈德·阿尔斯兰

注意:此示例不是多个示例,请再次阅读以下帖子的标题:)

您好,您还可以显示如何为特定的项目选择设置操作吗?示例:我想让用户通过单击其中一项来更改应用程序语言(可能使用if语句)。
阿达·切比(ArdaÇebi)'18年

6

弹出窗口不过是什么AlertDialog。因此,您只需要创建AlertDialog,然后使用扩展所需的视图LayoutInflater并使用的setView()方法设置扩展的视图AlertDialog


4

试试这个 :

public void onClick(View v) {

    final String[] fonts = {
        "Small", "Medium", "Large", "Huge"
    };

    AlertDialog.Builder builder = new AlertDialog.Builder(TopicDetails.this);
    builder.setTitle("Select a text size");
    builder.setItems(fonts, new DialogInterface.OnClickListener() {@
        Override
        public void onClick(DialogInterface dialog, int which) {
            if ("Small".equals(fonts[which])) {
                Toast.makeText(TopicDetails.this, "you nailed it", Toast.LENGTH_SHORT).show();
            } else if ("Medium".equals(fonts[which])) {
                Toast.makeText(TopicDetails.this, "you cracked it", Toast.LENGTH_SHORT).show();
            } else if ("Large".equals(fonts[which])) {
                Toast.makeText(TopicDetails.this, "you hacked it", Toast.LENGTH_SHORT).show();
            } else if ("Huge".equals(fonts[which])) {
                Toast.makeText(TopicDetails.this, "you digged it", Toast.LENGTH_SHORT).show();
            }
            // the user clicked on colors[which]

        }
    });
    builder.show();
}

我认为switch(font [which])正在这样做。

3

备选方案

这是我的第一篇文章,很高兴分享我的代码!这对我有用:

将这两行放在OnCreate事件上方

final String[] Options = {"Red", "Blue"};
AlertDialog.Builder window;

将此代码放在将触发此事件的事件上

window = new AlertDialog.Builder(this);
window.setTitle("Pick a color");
window.setItems(Options, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        if(which == 0){
           //first option clicked, do this...

        }else if(which == 1){
           //second option clicked, do this...

        }else{
        //theres an error in what was selected
            Toast.makeText(getApplicationContext(), "Hmmm I messed up. I detected that you clicked on : " + which + "?", Toast.LENGTH_LONG).show();
        }
    }
});

window.show();

1
是的,有很大的进步。一个switch语句改进了更多
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.