複数行の定数(/ 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"になります(手動で挿入した改行の後に煩わしいスペースが続きます)。回避策はありますか?.
これで問題が発生する場合は、XML文字列の最後に\n
を挿入するとインデントが発生します。例えば:
<string name="test">
A\n
B\n
C
</string>
として表示されます
A
B
C
代わりに、XML文字列のBEGINNINGに\n
を挿入する必要があります
<string name="test">
A
\nB
\nC
</string>
これにより、新しい行が適切に表示されます。
各行の終わりに別のバックスラッシュを使用します。
<string name="str1">
A\n\
B\n\
C\n\
</string>
この方法では、「\ 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"/>
お役に立てれば
次のように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>
私の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"));
}