如何在Android中的xml <string>资源中保留换行符?

Den*_*lov 11 xml android line-breaks aapt

我正在尝试使用多行常量(在/ res/values /文件夹下的.xml文件中定义),但似乎不可能在那里保留换行符 - 它们都在空格中转换.我试图使用字符串的"格式化"属性(将其设置为"true"和"false"),我也尝试在CDATA标记中包装字符串,如下所示:

<string name="str1">
A
B
C
</string>

<string name="str2" formatted="true">
A
B
C
</string>

<string name="str3" formatted="false">
A
B
C
</string>

<string name="str4"><![CDATA[
A
B
C
]]></string>

<string name="str5" formatted="true"><![CDATA[
A
B
C
]]></string>

<string name="str6" formatted="false"><![CDATA[
A
B
C
]]></string>
Run Code Online (Sandbox Code Playgroud)

所有这些字符串声明变体都会产生相同的结果 - 五个字符的字符串"AB C"(换行符被替换为单个空格).有什么方法可以避免这种情况吗?

PS我明白我可以使用"\n"来插入换行符,但无论如何,结果字符串将包含空格来代替实际的换行符; 即,遵循声明:

<string name="str1">
A\n
B\n
C\n
</string>
Run Code Online (Sandbox Code Playgroud)

产生字符串"A \n B \n C \n"(每个手动插入的换行符后跟恼人的空格).有没有解决方法?..

Jin*_*Jin 17

如果人们遇到此问题,\n在XML字符串末尾插入会导致缩进.例如:

<string name="test">
    A\n
    B\n
    C
</string>
Run Code Online (Sandbox Code Playgroud)

将显示为

A
  B
  C
Run Code Online (Sandbox Code Playgroud)

相反,您需要\n在BEGINNING XML字符串处插入

<string name="test">
    A
    \nB
    \nC
</string>
Run Code Online (Sandbox Code Playgroud)

这将导致新行正确显示.

  • (这是我讨厌 Android 编程的众多迟钝原因之一) (2认同)
  • 这仍然会在每一行的末尾添加一个空格。 (2认同)

Mor*_*oth 11

在每行末尾使用另一个反斜杠:

<string name="str1">
A\n\
B\n\
C\n\
</string>
Run Code Online (Sandbox Code Playgroud)

这样,您使用"\n"插入换行符,并在资源文件中转义行尾,以便它不会转换为空格.

仍然很难看,但它确实有效.


Shu*_*Ali 3

要从 XML 添加换行符,您需要添加“\n”。

这就是你的做法。

<string name="testing">A\nB\nC</string>

<TextView android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:lines="4"
        android:text="@string/testing"/>
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助

  • 结果只是单行字符串“AB C” (2认同)