Android:创建一个弹出窗口,其中有多个选择选项。

119

我一直在寻找如何创建一个弹出窗口或对话框,并提供4个可选项的方法。

我在Android开发者网站上看到了这张图片:

enter image description here

有人知道如何编写类似右侧的那个东西吗?我不需要在文本旁边添加任何图标,我只需要能够从4个选项中进行选择即可。

4个回答

308

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

例如:

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上):

Output

(背景地图未包含。;))


7
这里不需要使用.create().show()会返回由构造器创建的对话框并将其显示出来。 - TronicZomB
3
非常感谢您的帮助。我真的不想为一个简单的文本菜单实现一个XML布局,但是在偶然看到这篇文章之前,我无法找到一个简单的方法来实现它。 - Christopher Rathgeb
我们如何将这些文本居中,我们能否在文本内设置颜色?例如红色显示为红色?绿色的文本以绿色显示? - Ahmad Arslan
请注意:此示例不是多个示例,请再次阅读帖子标题 :) - user3402040
你好,您能否演示如何为特定的项目选择设置操作?例如:我想让用户通过点击其中一个项目来更改应用程序语言(可能使用if语句)。 - Arda Çebi
另外,是否可以在对话框标题下添加副标题? - Arda Çebi

7

试试这个:

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]) 正在执行它。 - user9599745

6

弹出窗口就是AlertDialog。所以您只需要创建AlertDialog,然后使用LayoutInflater填充所需的视图,并使用AlertDialogsetView()方法设置填充的视图。


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语句可以提高更多性能。 - user9599745

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