JSON 字符串到 TextView 换行符
JSON string to TextView newline
首先,我遇到过与我面临的问题类似的问题,但这些解决方案对我不起作用。
我的 Android 应用程序上有一个 TextView 字段,它应该显示多个段落,即多个新行。我从在线服务器中的数据库中获取此字符串作为 JSON。
文本中包含 \n,我希望它在应用程序收到后创建新行。但它显示整个文本,没有任何中断以及“\n”字符。
下面是我数据库中的文本。
First line. \nSecond line. \nThird line.
JSON 我在应用程序中收到的字符串。
{
"server_response": [{
"news_expand": "First line. \nSecond line. \nThird line."
}]
}
从 JSON 中提取字符串的代码。为了简单起见,我省略了获取 JSONArray 和 JSONObject 的代码。
na_expand = gna_jo.getString("news_expand");
从 JSON 中提取的字符串。通过打印 na_expand 字符串得到这个。
First line. \nSecond line. \nThird line.
在 TextView 中显示文本的代码。请注意下面的 'na_expand' 是一个存在于不同 activity 中的 SparseArray,因此是 'get(position)' 代码。
art_expand.setText(na_expand.get(position));
下面是我在模拟器上得到的文字。
第一行。 \n第二行。 \n第三行。
我做错了什么?
我认为在将测试设置为下面相同的文本视图之前,您应该将字符串中的 \n 替换为 \n
b= b.replaceAll("\n","\n");
试试下面的代码
myTextView.setText(Html.fromHtml("yourString with additional html tags"));
它将相应地解析所有 html 标签,标签的效果也会反映出来。
注意:对于大于 Nougat 的设备,请使用以下代码
myTextView.setText(Html.fromHtml("<h2>Title</h2><br><p>Description here</p>", Html.FROM_HTML_MODE_COMPACT));
希望对您有所帮助
\
字符是 JSON 中的转义字符。所以,当你得到 \n
时,它实际上意味着 \n
,而不是换行符,它应该只是 \n
。所以你看到的是预期的行为。您得到的 JSON 理想情况下应该是:
{
"server_response": [{
"news_expand": "First line. \nSecond line. \nThird line."
}]
}
让您的服务器正确响应,否则您将不得不删除不必要的 \
。
你的 TextView 上有android:singleLine="true"
吗?如果是,它将忽略 \n
并将文本放在一行中。
您可以在为 art_expand EditText 设置值时添加 replaceAll("\n","\n")
。应该是:
art_expand.setText(na_expand.get(position).replaceAll("\n","\n"));
所以我找到了解决该问题的方法。由于我不确定 \n 的问题出在哪里,我修改了数据库中的文本以使用 \n 以外的符号。例如:~
First line.~Second line.~Third line.
您可以使用这样的网站 - https://www.gillmeister-software.com/online-tools/text/remove-line-breaks.aspx 将换行符替换为您想要的任何符号。
接下来,我使用 StringSplitter class 拆分在 JSON 中接收到的字符串,然后再次使用 \n 将其连接在一起。
String joined;
String expand_temp = na_expand.get(position);
TextUtils.StringSplitter splitter = new TextUtils.SimpleStringSplitter('~');
splitter.setString(expand_temp);
StringBuilder stringBuilder = new StringBuilder();
for (String s_temp : splitter) {
stringBuilder.append(s_temp + "\n");
}
joined = stringBuilder.toString().trim();
这成功了!我在 setText.
中使用了这个字符串
art_expand.setText(joined);
首先,我遇到过与我面临的问题类似的问题,但这些解决方案对我不起作用。
我的 Android 应用程序上有一个 TextView 字段,它应该显示多个段落,即多个新行。我从在线服务器中的数据库中获取此字符串作为 JSON。
文本中包含 \n,我希望它在应用程序收到后创建新行。但它显示整个文本,没有任何中断以及“\n”字符。
下面是我数据库中的文本。
First line. \nSecond line. \nThird line.
JSON 我在应用程序中收到的字符串。
{
"server_response": [{
"news_expand": "First line. \nSecond line. \nThird line."
}]
}
从 JSON 中提取字符串的代码。为了简单起见,我省略了获取 JSONArray 和 JSONObject 的代码。
na_expand = gna_jo.getString("news_expand");
从 JSON 中提取的字符串。通过打印 na_expand 字符串得到这个。
First line. \nSecond line. \nThird line.
在 TextView 中显示文本的代码。请注意下面的 'na_expand' 是一个存在于不同 activity 中的 SparseArray,因此是 'get(position)' 代码。
art_expand.setText(na_expand.get(position));
下面是我在模拟器上得到的文字。
第一行。 \n第二行。 \n第三行。
我做错了什么?
我认为在将测试设置为下面相同的文本视图之前,您应该将字符串中的 \n 替换为 \n
b= b.replaceAll("\n","\n");
试试下面的代码
myTextView.setText(Html.fromHtml("yourString with additional html tags"));
它将相应地解析所有 html 标签,标签的效果也会反映出来。
注意:对于大于 Nougat 的设备,请使用以下代码
myTextView.setText(Html.fromHtml("<h2>Title</h2><br><p>Description here</p>", Html.FROM_HTML_MODE_COMPACT));
希望对您有所帮助
\
字符是 JSON 中的转义字符。所以,当你得到 \n
时,它实际上意味着 \n
,而不是换行符,它应该只是 \n
。所以你看到的是预期的行为。您得到的 JSON 理想情况下应该是:
{
"server_response": [{
"news_expand": "First line. \nSecond line. \nThird line."
}]
}
让您的服务器正确响应,否则您将不得不删除不必要的 \
。
你的 TextView 上有android:singleLine="true"
吗?如果是,它将忽略 \n
并将文本放在一行中。
您可以在为 art_expand EditText 设置值时添加 replaceAll("\n","\n")
。应该是:
art_expand.setText(na_expand.get(position).replaceAll("\n","\n"));
所以我找到了解决该问题的方法。由于我不确定 \n 的问题出在哪里,我修改了数据库中的文本以使用 \n 以外的符号。例如:~
First line.~Second line.~Third line.
您可以使用这样的网站 - https://www.gillmeister-software.com/online-tools/text/remove-line-breaks.aspx 将换行符替换为您想要的任何符号。
接下来,我使用 StringSplitter class 拆分在 JSON 中接收到的字符串,然后再次使用 \n 将其连接在一起。
String joined;
String expand_temp = na_expand.get(position);
TextUtils.StringSplitter splitter = new TextUtils.SimpleStringSplitter('~');
splitter.setString(expand_temp);
StringBuilder stringBuilder = new StringBuilder();
for (String s_temp : splitter) {
stringBuilder.append(s_temp + "\n");
}
joined = stringBuilder.toString().trim();
这成功了!我在 setText.
中使用了这个字符串art_expand.setText(joined);