Android textview不支持换行符

时间:2012-07-08 04:23:34

标签: android textview android-xml

我正在以编程方式创建一个自定义视图,该视图显示从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文件,该文件被解析并存储在一个hashmap中。我尝试了以下方法:

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

\ n未被\ r \ n取代。可能是因为我正在从一个对象转换为String吗?

7 个答案:

答案 0 :(得分:52)

完全相同的情况下,我一直有完全相同的问题。解决方案相当直接。

当你考虑它时,由于textview小部件正在显示带有文字“\ n”值的文本,因此它所给出的字符串必须存储每个“\ n”,如“\\ n”。因此,当读取并存储XML字符串时,所有出现的“\ n”都将被转义,以将该文本保存为文本文本。

无论如何,你需要做的就是:

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

适合我!

答案 1 :(得分:4)

对于换行符,您可以通过这种方式在xml布局中使用set text view。

  

现在是所有好人\r\n\r\n来帮助\r\n派对的时间{{1}}

答案 2 :(得分:3)

尝试了以上所有内容,对我自己进行了一些研究,得到了以下解决方案,用于渲染换行符转义字符:

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

1)使用替换方法,您需要过滤转义换行符(例如'\\ n')

2)然后只有换行'\ n'转义字符的每个实例都会呈现为实际的换行符

对于此示例,我使用了带有JSON格式化数据的Google Apps Scripting noSQL数据库(ScriptDb)。

干杯:D

答案 3 :(得分:2)

我也有这个问题,如果从XML资源设置文本(我知道这与OP不同,但值得了解它),我发现了一个非常简单的解决方案。

无需手动添加换行符,只需添加文字,因为它是引用

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

答案 4 :(得分:0)

试试这个

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

您的服务器需要发送FirstLine<br>lineAfterLineBreak<\br>

答案 5 :(得分:0)

要强制突破浏览文本视图的XML,您需要使用 \ r \ n 而不是 \ 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");

答案 6 :(得分:-1)

我只是使用它,现在对我来说工作正常

 message =message.replace("\n","\r\\n");