Как сохранить разрывы строк в xml <string> ресурсах в Android?

Я пытаюсь использовать многострочные константы (определенные в .xml файле под /res/values ​​/folder), но, похоже, невозможно сохранить разрывы строк там - все они преобразуются в пробелы. Я попытался сыграть с "отформатированным" атрибутом строк (установив его как "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>

Все эти варианты объявления строки дают идентичные результаты - пятисимвольная строка "A B C" (разрывы строк заменяются одним пробелом). Есть ли способ избежать этого?

P.S. Я понимаю, что я могу использовать "\n" для вставки разрывов строк, но в любом случае результирующая строка будет содержать пробелы вместо фактических разрывов строк; т.е. после объявления:

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

выводит строку "A\n B\n C\n" (каждый раз вручную вставленный разрыв строки сопровождается раздражающим пространством). Есть ли способ обхода?..

Ответ 1

Если у людей возникают проблемы с этим, вставка \n в конце строки XML вызывает отступ. Например:

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

Появится как

A
  B
  C

Вместо этого вам нужно вставить \n в НАЧАЛО строк XML

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

Это приведет к правильному отображению новых строк.

Ответ 2

Используйте другую обратную косую черту в конце каждой строки:

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

Таким образом, вы вставляете разрывы строк, используя "\n", и вы покидаете конец строки в файле ресурсов, чтобы он не преобразовывался в пространство.

Все еще некрасиво, но он работает.

Ответ 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"/>

Надеюсь, что это поможет

Ответ 4

Используйте html breaks следующим образом:

<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>

Ответ 5

Мои два цента.
Я решил использовать строковые массивы, загрузить ресурс и затем конкатенировать элементы массива.
Мне также приятно иметь каждую длинную строку в отдельном файле.

String[] storages = getResources().getStringArray(R.array.storages);
String oneline = new String();
    for (int i = 0; i < storages.length; i++) {
        oneline = oneline.concat(storages[i]);
        if (i < storages.length - 1)
            oneline.concat(System.getProperty("line.separator"));
    }