【问题标题】:How do I insert a line break in a String to show on an Android TextView widget?如何在字符串中插入换行符以显示在 Android TextView 小部件上?
【发布时间】:2014-04-20 00:56:40
【问题描述】:

当我像下面这样手动设置 textView 的字符串时,它可以工作。

<TextView
         android:id="@+id/textView1"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="line 1 \n line 2"/>

但是,当我尝试在这个 textView 上显示一个字符串时,它并没有换行。

String sample = "line 1 \n line 2";
textView1.setText(sample);

注意:实际上我是从 SQLite 数据库中获取字符串。但这不应该有所作为吧?因为它仍然是一个字符串!

sample = cursor.getString(DBAdapter.COL_sample);
textView1.setText(sample);

所以,现在我的 TextView 显示“\n”或“\r\n”字符而不是换行符。

【问题讨论】:

  • 在这两种情况下都对我有用...你见过this吗?
  • 我有,但遗憾的是它不起作用
  • 你在什么 api 级别上测试这个?

标签: java android string textview


【解决方案1】:

啊,既然你说它来自 SQLite 数据库,那就是问题所在。

您可以参考 Blundell here 的回答。

问题是 SQLite 会转义你的换行符,所以当你再次检索它时,它会以 \\\n 或等效的形式出现,你需要 unescape 才能正确显示(所以删除多余的斜线,所以它只是\n

因此,根据保存到数据库中的换行符,您需要进行相应处理。

所以使用链接的答案,你可以做这样的事情(取决于你需要做的反斜杠和其他字符的数量):

textView1.setText(sample.replaceAll("\\\\n", "\n"));

如果您需要在多个地方执行此操作,请为此创建一个函数。

【讨论】:

  • 非常感谢!解决了我的问题。今天我学到了:我应该总是尽可能详细地发布问题
【解决方案2】:

你可以试试

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

【讨论】:

    【解决方案3】:

    当您提取到 strings.xml 文件时它确实有效(您可以使用 cmd + 1 按钮快速完成此操作)。

    这是一个修复,作为奖励,您将正确地抽象您的字符串。

    【讨论】:

    • 对不起,我完全是新手,我不知道你在说什么。您能否提供有关如何解决此问题的更详细说明?
    • 高亮字符串。按 cmd+1。然后选择 ide 的提取字符串选项为您执行此操作。做完之后你就明白了。检查 res 文件夹。
    猜你喜欢
    • 2017-12-05
    • 2016-04-06
    • 2018-01-23
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 2016-08-13
    相关资源
    最近更新 更多