22

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

ご参考までに

System.getProperty("line.separator");

これは "/n" の文字列を返すため、"/r/n" に変換する必要はありません。

残念ながら、私のデータは、解析されてハッシュマップに格納された XML ファイルに由来しています。私は次のことを試しました:

String fireText = body1.toString().replaceAll("\n", "\r\n");

\n は \r\n に置き換えられません。オブジェクトから文字列に変換しているためでしょうか?

4

7 に答える 7

55

私はまったく同じ状況でまったく同じ問題を抱えています。解決策はかなり簡単です。

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

とにかく、あなたがする必要があるのは次のとおりです。

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

私のために働く!

于 2012-09-14T10:47:30.803 に答える
4

改行については、このように xml レイアウトでテキスト ビューの設定を使用します。

今こそ、\r\nすべての善良な男性が彼らの党\r\nを助けに来る時です\r\n

于 2012-07-08T04:46:31.387 に答える
3

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

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

<string name="test_string">"1. First
2. Second Line
3. Third Line"</string>
于 2014-06-27T07:27:15.310 に答える
0

テキストビューの 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");

于 2012-07-08T05:55:41.737 に答える
0

これを試して

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

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

于 2012-07-08T05:27:48.440 に答える