XMLファイルから解析されたテキストを表示するカスタムビューをプログラムで作成しています。テキストは長く、強制改行を表す「/ n」文字が含まれています。何らかの理由で、テキストビューに/ nが表示されており、改行はありません。これが私のコードです:
// get the first section body
Object body1 = tempDict.get("FIRE");
String fireText = body1.toString();
// create the section body
TextView fireBody = new TextView(getActivity());
fireBody.setTextColor(getResources().getColor(R.color.black));
fireBody.setText(fireText);
fireBody.setTextSize(14);
fireBody.setSingleLine(false);
fireBody.setMaxLines(20);
fireBody.setBackgroundColor(getResources().getColor(R.color.white));
// set the margins and add to view
layoutParams.setMargins(10, 0, 10, 0);
childView.addView(fireBody,layoutParams);
XMLファイルのテキストは次のようになります。
Now is the time /n for all good men to /n come to the aid of their /n party
そのように表示されるはずです。
Now is the time
for all good men to
come to the aid of their
party
抜けている設定はありますか?
[〜#〜]更新[〜#〜]
\ r\n自分のビューにハードコーディングすると機能します。つまり:
String fireText = "Now is the time \r\n for all good men \r\n to come to the aid";
実際には、\ nハードコーディングしても機能します。
String fireText = "Line one\nLine two\nLine three";
[〜#〜] fyi [〜#〜]
System.getProperty("line.separator");
これは「/ n」の文字列を返すため、「/ r/n」に変換する必要はありません。
残念ながら、私のデータは、解析されてハッシュマップに格納されたXMLファイルに由来しています。私は以下を試しました:
String fireText = body1.toString().replaceAll("\n", "\r\n");
\ nは\ r\nに置き換えられていません。オブジェクトから文字列に変換しているためでしょうか?
exactと同じ状況でexactと同じ問題が発生しています。解決策はかなり簡単です。
考えてみると、textviewウィジェットはリテラル「\ n」の値でテキストを表示しているため、与えられている文字列は「\\ n」のように各「\ n」を格納している必要があります。したがって、XML文字列が読み取られて保存されるときに、「\ n」のすべての出現箇所がエスケープされ、そのテキストがリテラルテキストとして保持されます。
とにかく、あなたがする必要があるのは:
fireBody.setText(fireText.replace("\\n", "\n"));
私のために働く!
改行の場合、この方法でxmlレイアウトのテキスト設定ビューを使用します。
今がその時だ
\r\n
すべての善良な人のために\r\n
彼らの助けに来る\r\n
パーティー
上記すべてを試してみましたが、私の独自の調査を行った結果、改行エスケープ文字をレンダリングするための次のソリューションが得られました。
string = string.replace("\\\n", System.getProperty("line.separator"));
1)フィルタリングする必要がある置換メソッドを使用する 脱出した 改行( '\\ n'など)
2)その後、改行 '\ n'エスケープ文字の各インスタンスが実際の改行にレンダリングされます
この例では、Google Apps Scripting noSQLデータベース(ScriptDb)とJSON形式のデータを使用しました。
乾杯:D
私もこの問題を抱えていて、XMLリソースからテキストを設定する場合、本当に簡単な解決策を見つけました(これはOPと同じではないことを知っていますが、知っておく価値はあります)。
改行を手動で追加する必要はありません。テキストをそのまま追加するだけです引用。
<string name="test_string">"1. First
2. Second Line
3. Third Line"</string>
テキストビューのXMLを強制的に改行するには、\ nの代わりに\ r\nを使用する必要があります。
したがって、XMLのコードは次のようになります。
_Android:text="Now is the time \r\n for all good men to \r\n come to the aid of their \r\n party"
_
または、プログラムで実行する場合は、Javaコードで:
_fireBody.setText("Now is the time \r\n for all good men to \r\n come to the aid of their \r\n party");
_
次のように、テキストを文字列リソース値として宣言することもできます。
_<string name="sample_string">"some test line 1 \n some test line 2"</string>
_
これを行う別の簡単な方法は、xmlファイルのTextViewのデフォルト属性を変更することです。
_<TextView
Android:id="@+id/tvContent"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:singleLine="false"
/>
_
次に、textView.setText("First line \nSecond line \nThird line");
を使用します
これを試して
fireBody.setText(Html.fromHtml("testing<br>line<\br>")
サーバーはFirstLine<br>lineAfterLineBreak<\br>
を送信する必要があります