如何在Android TextView中添加换行?

186

我想在TextView中添加一个换行符。

我尝试了建议使用的 \n 但它没有起作用。这是我设置文本的方式。

TextView txtSubTitle = (TextView)findViewById(r.id.txtSubTitle);
txtSubTitle.setText(Html.fromHtml(getResources().getString(R.string.sample_string)));

这是我的字符串:<string name="sample_string">some test line 1 \n some test line 2</string>

应该显示如下:

some test line 1
some test line 2

但它的显示效果是这样的:some test line 1 some test line 2

我有什么遗漏吗?


你是否将android:lines设置为至少2行? - Robby Pond
我的副标题已经有6-9行了,它会自动换到下一行,但如果我想强制换行,它就不会换行。 - dropsOfJupiter
你应该将你的解决方案发布为答案并接受它,这样人们就可以点赞了! - bigstones
1
我创建了一个小的示例项目,以说明编码换行符及其副作用的各种方式。提示:\n确实是最好的方法。https://github.com/paour/StringResourceTest - Pierre-Luc Paour
解决方案非常简单,只需删除 Html.fromHtml() 函数并直接使用 txtSubTitle.setText(getResources().getString(R.string.sample_string)) 即可。 - Bugs Happen
25个回答

1
在我的情况下,我通过添加以下内容解决了这个问题:
android:inputType="textMultiLine"

输入类型应该是 EditText 而不是 TextView。 - clauziere

1
我发现另一种方法: 需要添加"android:maxWidth="40dp""属性。 当然,它可能不完美,但它可以换行。

0
也许你能够将lf放入文本中,但它没有显示出来?请确保控件有足够的高度。例如:
正确的做法:
android:layout_height="wrap_content"

可能有误:

android:layout_height="10dp"

0

我觉得需要一个更完整的答案来更彻底地描述这个工作原理。

首先,如果你需要高级格式,请查看如何在字符串资源中使用HTML的手册。
然后你可以使用<br/>等。但是,这需要使用代码设置文本。

如果只是普通文本,在静态字符串资源中有很多方法来转义换行符(LF)。

用双引号括起字符串

最干净的方法是用双引号括起字符串。
这将使空格被解释为它实际出现的样子,而不是被折叠。
然后你可以简单地在这种方法中正常使用换行符(不要使用缩进)。

<string name="str1">"Line 1.
Line 2.
Line 3."</string>

请注意,在此模式下,某些字符需要进行特殊转义,例如\"

以下转义序列也适用于引用模式。

在XML中使用单行表示多行字符串时

在XML中优雅地转义换行符的方法是使用其代码点(十六进制中的10或0xA),并使用其XML/HTML实体&#xA;&#10;。这是转义任何字符的XML方式
然而,这似乎只在引用模式下有效。

另一种方法是简单地使用\n,但我认为它会对可读性产生负面影响(因为它不是XML中的特殊转义序列,Android Studio不会将其突出显示)。

<string name="str1">"Line 1.&#xA;Line 2.&#10;Line 3."</string>
<string name="str1">"Line 1.\nLine 2.\nLine 3."</string>
<string name="str1">Line 1.\nLine 2.\nLine 3.</string>

不要在这些转义序列后面包含换行符或任何空格,因为那会被解释为额外的空格。


0
我建议查询line.separator属性,并在需要添加换行符时使用它。
以下是一些示例代码:
TextView calloutContent = new TextView(getApplicationContext());
calloutContent.setTextColor(Color.BLACK);
calloutContent.setSingleLine(false);
calloutContent.setLines(2);
calloutContent.setText(" line 1" + System.getProperty ("line.separator")+"  line2" );

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