web-dev-qa-db-ja.com

Androidでxml <string>リソースの改行を保持する方法は?

複数行の定数(/ res/values /フォルダーの.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>

これらすべての文字列宣言バリアントは、同一の結果を生成します-5文字の文字列 "A B C"(改行は単一のスペースに置き換えられます)。これを回避する方法はありますか?

追伸"\ n"を使用して改行を挿入できることを理解していますが、結果の文字列には実際の改行の代わりにスペースが含まれます。つまり、次の宣言:

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

結果は文字列 "A\n B\n C\n"になります(手動で挿入した改行の後に煩わしいスペースが続きます)。回避策はありますか?.

13
Denys Avilov

これで問題が発生する場合は、XML文字列の最後に\nを挿入するとインデントが発生します。例えば:

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

として表示されます

A
  B
  C

代わりに、XML文字列のBEGINNINGに\nを挿入する必要があります

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

これにより、新しい行が適切に表示されます。

18
Jin

各行の終わりに別のバックスラッシュを使用します。

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

この方法では、「\ n」を使用して改行を挿入し、リソースファイルの行末をエスケープして、スペースに変換されないようにします。

まだ醜いですが、動作します。

11
Moritz Both

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

お役に立てれば

3
ShujatAli

次のようにhtmlの改行を使用します。

<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

私の2セント。
文字列配列を使用して解決し、リソースを読み込んでから、配列の要素を連結しました。
また、それぞれの長い文字列を別々のファイルに入れておくと便利です。

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
kekolab