【问题标题】:Displaying multiple lines of text and variables in an AlertDialog using setMessage()使用 setMessage() 在 AlertDialog 中显示多行文本和变量
【发布时间】:2024-05-23 19:00:02
【问题描述】:

我需要在警报对话框中显示多行文本。如果我使用多个 setMessage() 方法,则只显示最后一个 setMessage,如下所示。

final AlertDialog alertDialog = new AlertDialog.Builder(this).create();
                alertDialog.setTitle("Statistics:");
                alertDialog.setMessage("No. of attempts: " + counter);
                alertDialog.setMessage("No. of wins: " + counterpos);
                alertDialog.setMessage("No. of losses: " + counterneg);

有没有办法在对话框中为每一个创建一个新行?就像在 System.print.out() 中使用 \n;方法。

谢谢!

【问题讨论】:

    标签: android text android-alertdialog


    【解决方案1】:

    您可以只创建一个包含您想要显示的所有内容的字符串,然后在您希望换行符的位置添加“\n”。

    alertDialog.setMessage("No. of attempts: " + counter + "\n" + 
                "No. of wins: " + counterpos + "\n" + 
                "No. of losses: " + counterneg);
    

    使用 StringBuilder 甚至更好:

    StringBuilder sb = new StringBuilder();
    sb.append("No. of attempts: " + counter);
    sb.append("\n");
    sb.append("No. of wins: " + counterpos);
    sb.append("\n");
    sb.append("No. of losses: " + counterneg);
    alertDialog.setMessage(sb.toString());
    

    最好的方法是将静态文本提取到字符串资源中(在 strings.xml 文件中)。使用 %d(如果要插入字符串而不是整数,则使用 %s)在正确的位置获取动态值:

    <string name="alert_message">No. of attempts: %1$d\nNo. of wins: %2$d\nNo. of losses: %3$d</string>
    

    然后在代码中:

    String message = getString(R.string.alert_message, counter, counterpos, counterneg);
    alertDialog.setMessage(message);
    

    【讨论】:

      【解决方案2】:

      你可以这样做

      String alert1 = "No. of attempts: " + counter;
      String alert2 = "No. of wins: " + counterpos;
      String alert3 = "No. of losses: " + counterneg;
      alertDialog.setMessage(alert1 +"\n"+ alert2 +"\n"+ alert3);   
      

      【讨论】:

      • 您或其他人知道如何在字符串 XML 文件中执行此操作吗?
      【解决方案3】:

      您也可以直接在 strings.xml 文件中插入换行符:

      &lt;string name="my_string_text"&gt;This would revert your progress.\n\n Are you sure you want to proceed?&lt;/string&gt;

      【讨论】:

        【解决方案4】:

        Kotlin 通过以下方式简化了解决方案:

        • 链接 set 方法的调用
        • 使用内插字符串

        如下:

        "AlertDialog.Builder 此 Builder 对象允许链接对 set 方法的调用 " (https://developer.android.com/reference/android/app/AlertDialog.Builder)

            fun alertDemo() {
                var counter: Int = 5
        
                var counterpos: Int = 2
                var counterneg: Int = 3
                val builder = AlertDialog.Builder(this)
                    .setTitle("Statistics:")
                    .setMessage("""
                        |number of
                        |
                        |attempts: $counter
                        |wins: $counterpos
                        |losses: $counterneg
                        """.trimMargin())
                    .show()
            }
        

        我已经准备了结果的屏幕截图,但由于我是新来的,我似乎了解到上传屏幕截图可能仅限于更高级别的社区同行。还是我错过了什么?谢谢你启发(也许不仅仅是)我自己:)

        屏幕截图的格式很好,没有显示条形。

        PS: 对于极简主义者,由于链接,我们甚至可以消除多余的“val builder =”

        【讨论】:

          最近更新 更多