代码之家  ›  专栏  ›  技术社区  ›  Mike

换行符\n在textView中显示不正确

  •  19
  • Mike  · 技术社区  · 14 年前

    我知道如果你这样做

    myTextView.setText("This is on first line \n This is on second line");
    

    这是第一线
    这是第二线

    这在第一行\n这在第二行

    下面是我用来从数据库中提取字符串的代码行:

    factView.setText(factsCursor.getString(MyDBAdapter.FACT_COLUMN));
    

    是否有原因导致无法正确显示\n字符?这一定与数据库中的字符串有关。有什么建议吗?

    5 回复  |  直到 14 年前
        1
  •  19
  •   Austyn Mahoney Janak    14 年前

    正如falmari在评论中所说,当字符串放入数据库时,它将被转义。你可以通过调用 String s = unescape(stringFromDatabase) TextView .

    作为旁注,请确保您正在使用 DatabaseUtils.sqlEscapeString() SQL Injection .

        2
  •  35
  •   Blundell    14 年前

    我发现这个问题奥斯汀·马奥尼的答案是正确的,但这里有一点帮助:

       private String unescape(String description) {
        return description.replaceAll("\\\\n", "\\\n");
    }
    

    description

        3
  •  1
  •   Tyler    14 年前

    尝试 \\n 而不是 \n . 如果它抛出一个异常,而不是使用newline关键字来代替\n…。newline是一个字符,ascii 10;它通常是以字符串形式输入的…并将用于您的目的…)

        4
  •  1
  •   Brendan Draper    10 年前
    "This is on first line"||x'0A'||"This is on second line"
    

    || 连接字符串和 x'0A' 这是一条未经修饰的新线。

    "||x'0A'||" (如果字符串是双引号)。与其他回答者相比,这可能显得笨拙。但是,如果行位于单独的列中,则这也适用于select:

    SELECT firstline||x'0A'||secondline FROM wherever;
    

    我发现这个问题的同时,你也有同样的问题: http://www.mail-archive.com/sqlite-users@sqlite.org/msg43557.html

        5
  •  0
  •   Mostowski Collapse ninesided    12 年前

    文本区域可以是多行模式或单行模式。在单行模式下,换行符“\n”将被视为空格。如有疑问,可使用以下代码打开多行模式:

        setInputType(getInputType() | InputType.TYPE_TEXT_FLAG_MULTI_LINE);
    

    我遇到的问题是,相同的代码在honeycomb和froyo上不起作用,它们似乎有不同的默认值。我现在也排除了国旗,当我想迫使一个领域是单行线。

    从Android文档:

    在API级别3中添加了公共静态final int TYPE\u TEXT\u FLAG\u MULTI\u LINE

    田野。如果未设置此标志,则将显示文本字段

    http://developer.android.com/reference/android/text/InputType.html#TYPE_TEXT_FLAG_MULTI_LINE