New Line character \n not displaying properly in textView Android

前端 未结 5 1683
星月不相逢
星月不相逢 2020-12-02 17:53

I know that if you do something like

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

Then it will display properl

相关标签:
5条回答
  • 2020-12-02 18:15
    "This is on first line"||x'0A'||"This is on second line"
    

    The || concatenates strings and the x'0A' is an unescaped newline.

    If you're inserting records you'll have to replace every newline with "||x'0A'||" (If your string is double quoted). This may seem clumsy compared to the other asnswers. However if your lines are in separate columns this also works in a select:

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

    I found this while having the same problem you are: http://www.mail-archive.com/sqlite-users@sqlite.org/msg43557.html

    0 讨论(0)
  • 2020-12-02 18:22

    A text area can be in multi line or single line mode. When it is in single line mode newline characters '\n' will be treated as spaces. When in doubt, to switch multi line mode on you can use the following code:

        setInputType(getInputType() | InputType.TYPE_TEXT_FLAG_MULTI_LINE);
    

    I had the problem that the same code did not work on honeycomb and on froyo, which seem to have different defaults. I am now also excluding the flag when I want to force a field to be single lined.

    From the Android doc:

    public static final int TYPE_TEXT_FLAG_MULTI_LINE Added in API level 3

    Flag for TYPE_CLASS_TEXT: multiple lines of text can be entered into the field. If this flag is not set, the text field will be constrained to a single line. Constant Value: 131072 (0x00020000)

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

    You have to set the flag before you populate the field.

    0 讨论(0)
  • 2020-12-02 18:23

    As Falmarri said in his comment, your string is being escaped when it is put into the database. You could try and unescape the string by calling String s = unescape(stringFromDatabase) before you place it in your TextView.

    As a side note, make sure you are using DatabaseUtils.sqlEscapeString() on any kind of data that is from the user or an unknown changeable source when inserting data into the database. This will protect you from errors and SQL Injection.

    0 讨论(0)
  • 2020-12-02 18:23

    I found this question Austyn Mahoney's answer is correct but here's a little help:

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

    description being the string coming out of your SQLite DB

    0 讨论(0)
  • 2020-12-02 18:27

    Try \\n instead of \n. If it throws an exception than use newline keyword in place of \n....newline is one character, ascii 10; it's often entered in a string literal...and will serve your purpose....:)

    0 讨论(0)
提交回复
热议问题