Как сохранить разрывы строк в 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"));
}