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