Android的textview不支持换行符

我正在创build一个自定义视图以编程方式显示从XML文件parsing的文本。 文本很长,包含强制换行符的“/ 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 

有没有设置,我错过了?

UPDATE

\ 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文件,该文件被parsing并存储在一个hashmap中。 我尝试了以下内容:

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

\ n不会被replace为\ r \ n。 难道是因为我从一个对象转换为string?

在相同的情况下,我一直有完全相同的问题。 解决scheme非常简单。

当你考虑这个问题时,由于textview小部件正在显示带有文字“\ n”值的文本,因此它所指定的string必须存储每个“\ n”,比如“\\ n”。 所以,当你的XMLstring被读取和存储时,所有出现的“\ n”都将被转义以将该文本保留为文本文本。

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

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

为我工作!

尝试以上所有,做了一些我自己的研究导致以下解决scheme渲染换行符转义字符:

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

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

2)只有换行符的每个实例'\ n'转义字符才会被渲染成实际的换行符

在本例中,我使用了带有JSON格式化数据的Google Apps脚本noSQL数据库(ScriptDb)。

干杯:D

对于换行符,您使用xml布局的这种方式设置文本视图。

现在是所有优秀人士来参加聚会的时候了

我也有这个问题,我发现一个真正简单的解决scheme,如果从XML资源设置文本(我知道这是不一样的OP,但它的价值了解它)

没有必要手动添加换行符,只是添加文本,因为它是引用

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

尝试这个

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

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

要强制在textview的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资源值,如下所示:

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