2011-05-06 126 views
27

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

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一样。方法。

谢谢!

回答

61

你可以做像这样

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

谢谢。完美工作 – Navigatron 2011-05-06 15:16:00

+3

您或其他人知道如何在字符串XML文件中执行此操作吗? – Kurty 2012-07-17 03:24:14

+0

@Kurty:请参阅下面的答案。 – TofferJ 2012-10-08 06:22:29

21

您可以创建一个您希望显示的所有内容的字符串,并在希望换行的位置添加“\ 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); 
+0

也试过这种方法的工作原理一样好。谢谢 – Navigatron 2011-05-06 15:16:18

10

您也可以在strings.xml档案直接插入新行:

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