web-dev-qa-db-ja.com

Android textviewは改行をサポートしていません

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に置き換えられていません。オブジェクトから文字列に変換しているためでしょうか?

19
wyoskibum

exactと同じ状況でexactと同じ問題が発生しています。解決策はかなり簡単です。

考えてみると、textviewウィジェットはリテラル「\ n」の値でテキストを表示しているため、与えられている文字列は「\\ n」のように各「\ n」を格納している必要があります。したがって、XML文字列が読み取られて保存されるときに、「\ n」のすべての出現箇所がエスケープされ、そのテキストがリテラルテキストとして保持されます。

とにかく、あなたがする必要があるのは:

fireBody.setText(fireText.replace("\\n", "\n"));

私のために働く!

53
Rob

改行の場合、この方法でxmlレイアウトのテキスト設定ビューを使用します。

今がその時だ \r\nすべての善良な人のために\r\n彼らの助けに来る\r\nパーティー

4
Md Abdul Gafur

上記すべてを試してみましたが、私の独自の調査を行った結果、改行エスケープ文字をレンダリングするための次のソリューションが得られました。

string = string.replace("\\\n", System.getProperty("line.separator"));

1)フィルタリングする必要がある置換メソッドを使用する 脱出した 改行( '\\ n'など)

2)その後、改行 '\ n'エスケープ文字の各インスタンスが実際の改行にレンダリングされます

この例では、Google Apps Scripting noSQLデータベース(ScriptDb)とJSON形式のデータを使用しました。

乾杯:D

3
Robert

私もこの問題を抱えていて、XMLリソースからテキストを設定する場合、本当に簡単な解決策を見つけました(これはOPと同じではないことを知っていますが、知っておく価値はあります)。

改行を手動で追加する必要はありません。テキストをそのまま追加するだけです引用

<string name="test_string">"1. First
2. Second Line
3. Third Line"</string>
2
Corbella

テキストビューの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");を使用します

0
Swayam

これを試して

fireBody.setText(Html.fromHtml("testing<br>line<\br>") 

サーバーはFirstLine<br>lineAfterLineBreak<\br>を送信する必要があります

0
Mohsin Naeem