【问题标题】:Android: create a popup that has multiple selection optionsAndroid:创建一个具有多个选择选项的弹出窗口
【发布时间】:2013-04-29 16:01:11
【问题描述】:

我一直在四处寻找,试图弄清楚如何创建一个有 4 个选项可供选择的弹出窗口或对话框。

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

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

【问题讨论】:

    标签: android menu dialog popup


    【解决方案1】:

    您可以使用要在其中显示的选项创建一个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 上):

    (不包括背景图。;))

    【讨论】:

    • .create() 在这里是不必要的,.show() 将返回由构建器创建的对话框,然后将其显示出来
    • 非常感谢您。我真的不想为简单的文本菜单实现 xml 布局,并且在偶然发现这篇文章之前找不到一种简单的方法。
    • 我们如何在这些文本中间设置颜色?例如红色显示红色?绿色文本以绿色显示?
    • 注意:这个例子不是多个,请从帖子中再次阅读标题:)
    • 您好,您能否介绍一下如何为特定项目选择设置操作?示例:我想让用户通过单击其中一项来更改应用语言(可能使用 if 语句)。
    【解决方案2】:

    试试这个:

    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】:

    弹出窗口不过是AlertDialog。所以你只需要创建AlertDialog,然后使用LayoutInflater 膨胀你想要的视图,并使用setView()setView() 方法@ 方法设置膨胀视图

    【讨论】:

      【解决方案4】:

      替代选项

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

      将这两行放在 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();
      

      【讨论】:

      • 是的,进步很大。 switch 语句改进更多
      猜你喜欢
      • 1970-01-01
      • 2011-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-11
      • 1970-01-01
      • 1970-01-01
      • 2019-06-12
      相关资源
      最近更新 更多