web-dev-qa-db-fra.com

Comment préserver les sauts de ligne dans les ressources xml <string> sous Android?

J'essaie d'utiliser des constantes multilignes (définies dans le fichier .xml sous/res/values ​​/ folder), mais il semble impossible de conserver les sauts de ligne car ils sont tous convertis en espaces. J'ai essayé de jouer avec l'attribut "formaté" des chaînes (en le définissant à la fois sur "vrai" et sur "faux", j'ai également essayé d'habiller des chaînes dans des balises CDATA, comme ceci:

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

Toutes ces variantes de déclaration de chaîne produisent des résultats identiques - chaîne de cinq caractères "A B C" (les sauts de ligne sont remplacés par un seul espace). y-a-t-il un moyen d'éviter ça?

P.S. Je comprends que je peux utiliser "\ n" pour insérer des sauts de ligne, mais la chaîne résultante contiendra des espaces à la place des sauts de ligne réels; c'est-à-dire après la déclaration:

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

donne la chaîne "A\n B\n C\n" (chaque saut de ligne inséré manuellement suivi d'un espace gênant). Y at-il une solution de contournement? ..

11
Denis Avilov

Au cas où des problèmes surviendraient, l’insertion de \n à la fin de la chaîne XML provoquerait une indentation. Par exemple:

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

Apparaîtra comme

A
  B
  C

Au lieu de cela, vous devez insérer \n au début des chaînes XML.

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

Cela entraînera les nouvelles lignes à apparaître correctement.

11
Jin

Utilisez une autre barre oblique inverse à la fin de chaque ligne:

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

De cette façon, vous insérez des sauts de ligne à l'aide du caractère "\ n" et vous échappez la fin de la ligne dans le fichier de ressources afin qu'il ne soit pas converti en espace.

Toujours moche, mais ça marche.

8
Moritz Both

Pour ajouter une nouvelle ligne à partir de XML, vous devez ajouter "\ n".

Voici comment tu le fais.

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

J'espère que cela t'aides 

3
ShujatAli

Utilisez des pauses HTML comme ceci:

<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>
3
Chris Moore

Mes deux centimes.
J'ai résolu l'utilisation de tableaux de chaînes, le chargement de la ressource, puis la concaténation des éléments du tableau.
Je trouve aussi agréable d’avoir chaque longue chaîne dans un fichier séparé.

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"));
    }
0
Gianluca