我正在以编程方式创建一个自定义视图,该视图显示从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吗?
答案 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");