字符串资源无法换行,是否有解决方法?

216

看起来无法在 XML 资源字符串中添加一个新行符 /n。还有其他的方法吗?


18
你是指什么?你有例子吗? - Keith
1
应该是 \n。对我来说有效。 - akash89
2
@anandtripathi,我撤销了你的编辑,因为它使答案变得毫无意义。原始问题中,OP错误地使用了\n而不是/n,这是问题的实质。我们不应该纠正OP的代码,而只应该纠正问题描述,出于显而易见的原因。 - Vega
重建项目可能会有所帮助。 - Kuvonchbek Yakubov
21个回答

438

使用反斜杠而不是正斜杠。\n

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="title">Hello\nWorld!</string>
</resources>

另外,如果您计划将字符串用作HTML,则可以使用&lt;br /&gt;来表示换行符(<br />)。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="title">Hello&lt;br /&gt;World!</string>
</resources>

7
在strings.xml中,它只接受HTML格式,因此<br />是提供的适当解决方案。 - akash89
我想为像我一样因为使用Android Studio而来到这个页面的人提供一些信息。在AS中,当你使用IDE工具提取字符串时,它会自动去除换行符。你只需要手动添加它们,就可以正常工作了。不确定为什么会这样做。 - Jans Rautenbach
1
对我来说,\n 不起作用,无论是更改行还是字符串都没有 /n。你知道为什么吗?换行键也不起作用,这在其他答案中已经说明了。 - Thelouras
似乎至少在翻译编辑器中,您需要使用正斜杠,否则它将仅将其解释为文字\n。谈论一致的设计... - Metalfreak
7
最近的更新是:在strings.xml文件中,\n/n都无法使用,&lt;br /&gt;也不行。但是仅使用<br />就可以完美地解决这个问题!我进行了测试以确定,只有<br />符号符合预期! - schnondle
\n 在运行时可以工作,但在布局检查器中无法工作。 - MehranB

53

我知道这是一个相当老的问题,但当我搜索时它排在首位。因此,我想使用另一种方法进行更新。

在strings.xml文件中,您可以使用\n或者直接按回车键:

<string name="Your string name" > This is your string.

   This is the second line of your string.\n\n Third line of your string.</string>

在您的TextView上将出现以下结果:

这是你的字符串。

这是你的字符串的第二行。

你的字符串的第三行。

这是因为在字符串的开始声明和新行之间有两个回车。我还添加了 \n 以增加清晰度,因为两者都可以使用。我喜欢在xml中使用回车符以便查看列表或任何多行字符串。以上纯属个人意见。


3
哦,这很有趣。谢谢分享。我感觉自己像个白痴问这个问题,但看起来这帮了很多人。哈哈! - Andi Jay
7
(至少是当前版本的)安卓系统将两个连续的换行符视为一个空格。https://github.com/paour/StringResourceTest - Pierre-Luc Paour

45

尝试以下解决方案:

  • 添加\n
  • \n后面没有空格的情况下添加\n
  • 使用""并在文本中按Enter
  • 在文本中按Enter
  • 使用lines=2

对我有帮助的是br标签。

<string name="successfullyfeatured">successfully<br/> You are now a member</string>

更新

最可靠的解决方案是使用翻译编辑器编辑文本,它将为您处理换行符。


对我来说,它在不同的平台上表现不同。 - Fatih
为什么要使用 <br/> 而不是 /n - IgorGanapolsky
我尝试了换行符,但没有起作用,最后能起作用的是 br 标签。@IgorGanapolsky - Mahmoud Mabrok

36

这是一个早期的问题,但我发现当您创建这样的字符串:

<string name="newline_test">My
New line test</string>

您的应用程序输出将如下所示(无换行符)。
My New line test

当你用引号将字符串括起来时

<string name="newline_test">"My
New line test"</string>

换行符将出现:

My 
New line test

1
对我来说可以工作,但是为了保险起见,请记住当您像上面那样定义资源时,应避免使用Html.fromHtml。谢谢。 - Ahmad Reza Enshaee
2
将多行字符串用引号括起来完美地解决了问题,比到处添加\n(可能很快变得难以阅读和混乱)要好得多。不用说,但以防万一:如果您想在文本中包含一个文字引号符号,必须转义它:\" - Nolonar
请注意,资源中的行不应缩进,否则输出将带有前导空格。 - pretorh

9
在使用Android Studio中的翻译编辑器时,只需单击右侧的图标(或在Windows上使用Shift-Enter,在MacOS上使用Alt/Option-Enter),然后使用返回键添加换行符即可。这将在本地化的strings.xml文件中正确插入\n

非常感谢您的回答。 - Simple
3
在Ubuntu上,右侧没有图标,按Shift-Enter会跳到上面的下一段文字。 - Tibor Nagy
1
已更新此内容,包含有关在哪里找到按钮的信息。 - The Fluffy T Rex
在Android Studio的翻译编辑器中,您需要选择文本项,然后滚动到翻译编辑器窗口底部,在那里显示键、默认值和翻译,然后单击值(用于编辑文本/内容),按下“Shift + Enter”键,这将打开一个文本编辑窗口。在此处,您可以创建段落,以便它们显示并保存。这将被用作段落并相应地显示。 - Simmam

7
在最新版的Android Studio中,"\n"将被打印出来,就好像它本来就应该在那里一样,除非整个字符串都在单引号内。
例如:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="title">"Hello\nWorld!"</string>
</resources>

如何可以输入两个换行符? - jvargas

5

我尝试了两种选项,它们都高效且易于操作。

  1. 我使用了HTML标签<br/>
<string name="name_detail">
        Hey user. <br/>
        Enjoy a new shopping deal.!!
</string>

在strings.xml文件顶部添加一个编码行。
<?xml version="1.0" encoding="utf-8"?>

并使用“\n”来换行。 例如

<string name="name_detail">
        Hey user.\n
        Enjoy a new shopping deal.!!
</string>

4
如果在XML文件中的字符串中加入"\n",那么它会被视为"\\n"。因此,我这样做了:
text = text.Replace("\\\n", "\n");   ( text is taken from resX file) 

然后我在屏幕上看到了一行跳


3
只有在使用向导添加字符串时才会发生。如果您编辑 XML,它也能工作。 - Daniel Argüelles
我也犯了这个错误。谢谢你的建议。但是我已经自己纠正了所有 \n 的出现。 - Kanat
不是一个好的解决方案。你应该直接从资源中获取文本并使用它。如果你需要处理更多特殊字符怎么办?你也要为它们编写更多的代码吗?如果有边缘情况怎么办? - dephinera

3
你可以使用这种格式。
<string name="test">
"This is
a new line"
</string>

这是最简单的解决方案。我在字符串资源中使用“\n”表示新行。最终,使用这个“引用数据”,我轻松地完成了我的工作。 - Rahat Shah
需要使用双引号吗? - undefined

3

不要在 \n 后面加空格,否则它将无法正常工作。我不知道原因,但这个技巧对我非常有效。


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