如何在Android中的TextView中添加换行符?

272

在XML中定义TextView时,如何为其添加新行?\n似乎不起作用。

<TextView
   android:id="@+id/txtTitlevalue"
   android:text="Line1 -\nLine2"
   android:layout_width="54dip"
   android:layout_height="fill_parent"
   android:textSize="11px" />

1
你的代码在我这里可以工作。你得到的是什么而不是多行文本? - molnarm
2
在可视化编辑器中,它显示为文本 \n。 - Pentium10
32个回答

321

不要相信可视化编辑器。 你的代码在模拟器中有效。


在我的情况下,可视化编辑器是说实话的。它添加了另一个反斜杠来显示反斜杠。正确的方法是将文本放入XML文件中。 - dp2050
视觉编辑器说:“你为什么不相信我?” LOL - Titus Sutio Fanpula

95

尝试:

android:lines="2"

\n 应该有效。


1
我的TextView可能会超过2行。它是一个控件,可以是任何东西。 - dropsOfJupiter

46

尝试使用 System.getProperty("line.separator");


44

我认为这与你的 HTM.fromHtml(subTitle) 的调用有关:"\n" 对 HTML 来说没有任何意义。尝试使用 <br/> 替换 "\n"。


27
这是因为它是 <br/>,而不是 </br>。 - Ilya Kogan

22

首先,将这个放在你的TextView里:

android:maxLines="10"

然后在TextView的文本中使用\n

maxLines属性使TextView最多只能有这么多行高。你可以选择其他数字 :)


22

尝试了上述所有方法,我自己进行了一些研究,得出了以下解决方案,以渲染换行符转义字符:

string = string.replace("\\\n", System.getProperty("line.separator"));
  1. 使用replace方法需要过滤转义的换行符(例如'\\\n')。

  2. 只有这样,每个换行符'\n'转义字符的实例才能呈现为实际的换行符。

对于这个示例,我使用了一个Google Apps脚本的noSQL数据库(ScriptDb),其中数据格式为JSON。

干杯 :D


1
这个对我很有用:replace("\n", System.getProperty("line.separator")); - slott
而是,string = string.replaceAll("\\n", System.getProperty("line.separator")); - user846316

11

确保你的 \n"\n" 中才能正常工作。


10
<TextView
   android:id="@+id/txtTitlevalue"
   android:text="Line1: \r\n-Line2\r\n-Line3"
   android:layout_width="54dip"
   android:layout_height="fill_parent"
   android:textSize="11px" />

我认为这会起作用。


9

我个人建议,使用Android TV。

在读取XML字符串时,请添加\n

public void setSubtitle(String subtitle) {
    this.subtitle = subtitle.replace("\\n", System.getProperty("line.separator"));
}

9
我刚刚解决了相同的问题,在xml中添加以下属性即可:
android:lines="2" android:maxLines="4" android:singleLine="false"

工作。Html.fromHtml("text1 <br> text2").toString() 也可以工作。


这仍然是相关的,谢谢!我有maxLines,但我没有singleLine=false。 - blast_hardcheese
这是唯一对我有效的解决方案。谢谢! - Silas

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