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

如何在xml中保留换行符<;字符串>;Android中的资源?,android,xml,line-breaks,aapt,Android,Xml,Line Breaks,Aapt,我尝试使用多行常量(在/res/values/folder下的.xml文件中定义),但似乎不可能在那里保留换行符-它们都在空格中转换。我尝试过使用字符串的“formatted”属性(将其设置为“true”和“false”),也尝试过在CDATA标记中包装字符串,如下所示: <string name="str1"> A B C </string> <string name="str2" formatted="true"> A B C </string&g

我尝试使用多行常量(在/res/values/folder下的.xml文件中定义),但似乎不可能在那里保留换行符-它们都在空格中转换。我尝试过使用字符串的“formatted”属性(将其设置为“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>
<string name="your_string">
<![CDATA[
<p>
    Here is your text.<br/>
    This text is on a new line.<br/>
    So is this text. \n
    This is on the previous line with a space added.
</p>
]]>
</string>

A.
B
C
A.
B
C
A.
B
C
所有这些字符串声明变量都会产生相同的结果-五个字符的字符串“abc”(换行符由单个空格代替)。有没有办法避免这种情况

另外,我知道我可以使用“\n”插入换行符,但无论如何,生成的字符串将包含空格来代替实际的换行符;即,以下声明:

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

A\n
B\n
C\n

结果是字符串“A\n B\n C\n”(每个手动插入的换行符后面都有讨厌的空格)。是否有解决方法?。

要从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"/>
A\nB\nC

希望这有助于像这样使用html分隔符:

<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>
<string name="your_string">
<![CDATA[
<p>
    Here is your text.<br/>
    This text is on a new line.<br/>
    So is this text. \n
    This is on the previous line with a space added.
</p>
]]>
</string>

这是您的文本。
此文本位于新行上。
这也是文本。\n 这位于上一行,并添加了一个空格。

]]>
我的两分钱。
我使用字符串数组解决了这个问题,加载资源,然后连接数组的元素。
我还发现将每个长字符串放在一个单独的文件中也很好

String[]storages=getResources().getStringArray(R.array.storages);
字符串单行=新字符串();
for(int i=0;i
如果人们对此有问题,在XML字符串末尾插入
\n
会导致缩进。例如:

<string name="test">
    A\n
    B\n
    C
</string>
相反,您需要在XML字符串的开头插入
\n

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

A.
\铌
\数控

这将使新行正确显示。

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

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

A\n\
B\n\
C\n\
这样,您可以使用“\n”插入换行符,并在资源文件中转义行尾,使其不会转换为空格


仍然很难看,但它很管用。

我终于找到了一种方法,它不会在任何地方添加额外的空间,看起来对我来说也不错:

<string name="test">
A\
B\
C\
</string>

A\
B\
C\
以及:


“A
B
C“

使用API 21和30上的Android Studio 4.1.2。

在最新的Android版本中,您只有一个解决方案

您的字符串数据必须如下所示

<string name="thanks_from_head_shield">
    Mr. Prasanna Sumudu Chandrasekara<br />
    https://www.java2s.com<br />
    https://www.oracle.com/java<br />
    https://www.javatongue.blogspot.com<br />
    https://www.coderwall.com<br />
    https://www.igetintopc.com<br />
    https://www.tutorialspoint.com<br />
    https://stackoverflow.com<br />
    https://www.javatpoint.com<br />
    https://coderanch.com<br />
    https://www.c-sharpcorner.com<br />
    https://javapointers.com<br />
    https://www.fatalerrors.org<br />
    https://dzone.com<br />
    https://www.javamadesoeasy.com<br />
    https://www.geeksforgeeks.org<br />
    https://www.jetbrains.com<br />
    https://www.developer.android.com<br />
    Adobe.Inc<br />
    Thanks for other all softwares I used  and Other<br />
</string>

Prasanna Sumudu Chandrasekara先生
https://www.java2s.com
https://www.oracle.com/java
https://www.javatongue.blogspot.com
https://www.coderwall.com
https://www.igetintopc.com
https://www.tutorialspoint.com
https://stackoverflow.com
https://www.javatpoint.com
https://coderanch.com
https://www.c-sharpcorner.com
https://javapointers.com
https://www.fatalerrors.org
https://dzone.com
https://www.javamadesoeasy.com
https://www.geeksforgeeks.org
https://www.jetbrains.com
https://www.developer.android.com
Adobe.Inc
感谢我使用的其他所有软件和其他

您可以添加

标记,而无需
标记。
这是在Android studio 4.2.1中100%工作的。但我仅使用API级别30对其进行了测试。@Chris Moore对于Android studio 4.2.1是不正确的。

结果只是一行字符串“A B C”@shujatAli,你读过我的问题的postscriptum了吗?当然我知道我可以使用“\n”,但问题是使用跨越多行的大字符串常量,并在它们位于源xml文件中的位置保留换行符。例如,我试图在xml文件中的常量中存储格式化SQL查询,因为它们大多数都非常大(通常有几十行)并且直接在源代码中定义这样的字符串很不方便。“格式化”在这里的意思是“带换行符”。要实现这一点,目前我必须添加“\n”到每一行的结尾,这有点烦人。此外,aapt在源xml中插入额外的空格来代替每一个实际的换行符。不幸的是,似乎没有更好的解决方案。请参阅-答案是对LF使用HTML实体。(…)在那里不可能保留换行符——它们都是在空格中转换的——这不是真的。在所有情况下,第一个(在A之前)和最后一个(在C之后)换行符都被清楚地删除了。(这是我讨厌编程Android的许多愚蠢原因之一)这仍然会在每行的末尾添加一个空格。是的,结尾的空格是不可避免的,除非你只是将所有内容都内联起来,它也没有开始时那么明显。哈哈,我的天啊,谢谢你,我尝试了这么多不同的组合来消除缩进!Jin的答案很好,但这个答案更好,应该不会他接受了答案。我已经用Android Studio 2.1在API 17上测试了这个问题,但它不起作用。仍然在API 25和Android Studio 3.4上不起作用。
\nA
“不幸的是”仍然是一个更好的/有效的解决方案。我怎么能做两条中断线?我需要两条空线