使用setMessage()在AlertDialog中显示多行文本和变量

时间:2011-05-06 14:54:20

标签: android text alertdialog

我需要在Alert Dialog中显示多行文本。如果我使用多个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;方法

谢谢!

4 个答案:

答案 0 :(得分:72)

你可以做这样的事情

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);   

答案 1 :(得分:23)

你可以创建一个你想要显示的所有内容的字符串,并在你想要换行符的地方添加“\ 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 :(得分:12)

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

<string name="my_string_text">This would revert your progress.\n\n Are you sure you want to proceed?</string>

答案 3 :(得分:0)

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

  • 链接设置方法的调用
  • 使用插值字符串

如下:

“ 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 =“