如何在Android TextView中添加换行符?

时间:2011-03-21 19:20:22

标签: android textview line line-breaks

我正在尝试在TextView中添加换行符。

我试过建议\ n但是什么也没做。这是我设置文本的方式。

TextView txtSubTitle = (TextView)findViewById(r.id.txtSubTitle);
txtSubTitle.setText(Html.fromHtml(getResources().getString(R.string.sample_string)));

这是我的字符串:<string name="sample_string">some test line 1 \n some test line 2</string>

它应该如此显示:

some test line 1
some test line 2

但它显示如下:some test line 1 some test line 2

我错过了什么吗?

26 个答案:

答案 0 :(得分:198)

\n对我有用,就像这样:

<TextView android:text="First line\nNext line"

答案 1 :(得分:82)

好的想通了:

<string name="sample_string"><![CDATA[some test line 1 <br />some test line 2]]></string>

因此需要在CDATA中包装,并在html标签中添加内容

答案 2 :(得分:66)

Android 1.6版无法识别\ r \ n。 相反,使用:System.getProperty(“line.separator”)

String s = "Line 1"
           + System.getProperty ("line.separator")
           + "Line 2"
           + System.getProperty ("line.separator");

答案 3 :(得分:57)

如果您将字符串资源值放在这样的引号中,则换行符(\ n) 只能:

<string name="sample_string">"some test line 1 \n some test line 2"</string>

如果你没有这样的引号,它就不会进行换行:

<string name="sample_string">some test line 1 \n some test line 2</string>
是的,就这么简单。

答案 4 :(得分:29)

尝试了以上所有内容,对我自己做了一些研究,得到了以下解决方案来渲染换行转义字符:

string = string.replace("\\\n", System.getProperty("line.separator"));
  1. 使用替换方法,您需要过滤转义换行符(例如'\\ n')

  2. 只有这时换行'\ n'转义字符的每个实例都会呈现为实际的换行符

  3. 对于此示例,我使用了带有JSON格式数据的Google Apps Scripting noSQL数据库(ScriptDb)。

    干杯:D

答案 5 :(得分:16)

这对我有用

android:text="First \n Second"

答案 6 :(得分:16)

有两种解决方法。 如果将字符串用作原始字符串,则需要使用换行符 字符。如果您将其用作html,例如通过用Html.fromString解析它, 第二种变体更好。

1)换行符\n

<string name="sample> This\nis a sample</string>

2)Html换行标记<br><br />

<string name="sample> This<br>is a sample</string>

答案 7 :(得分:15)

这对我有用,也许有人会发现这有用:

TextView textField = (TextView) findViewById(R.id.textview1);
textField.setText("First line of text" + System.getProperty("line.separator") + "Linija 2");

答案 8 :(得分:9)

如果您使用XML来声明TextView使用android:singleLine = "false"或使用Java,请使用txtSubTitle.setSingleLine(false);

答案 9 :(得分:9)

二手Android Studio 0.8.9。对我有用的唯一方法是使用\n。 用CDATA包装也不用<br><br />

答案 10 :(得分:8)

非常简单:使用“\ n”

    String aString1 = "abcd";
    String aString2 = "1234";
    mSomeTextView.setText(aString1 + "\n" + aString2);

\ n对应于ASCII字符0xA,即“LF”或换行符

\ r \ n对应于ASCII字符0xD,即“CR”或回车

这可以追溯到第一台打字机,您可以选择只进行换行(并只键入一行),或换行+回车(也移动到行的开头)< / p>

在Android / java上\ n \ n对应一个回车+换行符,否则你只是'覆盖'同一行

答案 11 :(得分:8)

我使用以下内容:

YOUR_TEXTVIEW.setText("Got some text \n another line");

答案 12 :(得分:6)

尝试仔细检查您的本地化。 可能,您尝试编辑一个文件(本地化),但实际上使用另一个文件just like in my case进行编程。默认的系统语言是俄语,而我正在尝试编辑英语本地化。

就我而言,工作解决方案是使用“\ n”作为行分隔符:

    <string name="string_one">line one.
    \nline two;
    \nline three.</string>

答案 13 :(得分:4)

您也可以添加"&lt;br&#47;&gt;"而不是\ n。

这是&lt; br /&gt;

的HTML转义代码

然后您可以向TexView添加文字:

articleTextView.setText(Html.fromHtml(textForTextView));

答案 14 :(得分:3)

你也可以使用Android Studio的字符串编辑器,它会自动生成线制动器和类似的东西......

答案 15 :(得分:2)

由于Html.fromHtml已弃用,我只是使用此代码在下一行中获取String2。

textView.setText(fromHtml("String1 <br/> String2"));

@SuppressWarnings("deprecation")
    public static Spanned fromHtml(String html){
        Spanned result;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
            result = Html.fromHtml(html,Html.FROM_HTML_MODE_LEGACY);
        } else {
            result = Html.fromHtml(html);
        }
        return result;
    }

答案 16 :(得分:2)

The most easy way to do it is to go to values/strings (in your resource folder)

Declare a string there:

load

And in your specific xml file just call the string like

append

答案 17 :(得分:1)

我发现了另一种方法: 需要添加&#34; android:maxWidth =&#34; 40dp&#34; &#34;属性。 当然,它可能无法完美地工作,但它会给出换行符。

答案 18 :(得分:1)

\ n不适合我。我能够通过将xml更改为文本并构建textview文本属性来解决问题,如下所示。

android:text="Line 1
Line 2
Line 3

DoubleSpace"

希望这可以帮助那些说不能为他们工作的人。

答案 19 :(得分:1)

我正在从文件中读取文本,因此我采用了一种略微的方法,因为在文件中添加\ n会导致文本中出现\ n。

    final TextView textView = (TextView) findViewById(R.id.warm_up_view);
    StringBuilder sb = new StringBuilder();
    Scanner scanner = new Scanner(getResources().openRawResource(R.raw.warm_up_file));
    while (scanner.hasNextLine()) {
      sb.append(scanner.nextLine());
      sb.append("\n");
    }

    textView.setText(sb.toString());

答案 20 :(得分:1)

据我所知,在以前版本的 android studio 中使用单独的行“\n”代码。但是新的(4.1.2)使用“

<string name="string_name">Sample text 1 \n Sample text 2 </string>

新的:

<string name="string_name">Sample text 1 <br/> Sample text 2 </string>

答案 21 :(得分:0)

也许您可以将 lf 放入文本中,但它不会显示?确保控件有足够的高度。例如:

正确:

android:layout_height="wrap_content"

可能是错误的:

android:layout_height="10dp"

答案 22 :(得分:0)

对于我来说,我通过添加以下内容解决了这个问题:

android:inputType="textMultiLine"

答案 23 :(得分:0)

尝试一下:

         TextView calloutContent = new TextView(getApplicationContext());
         calloutContent.setTextColor(Color.BLACK);
         calloutContent.setSingleLine(false);
         calloutContent.setLines(2);
         calloutContent.setText(" line 1" + System.getProperty ("line.separator")+"  line2" );

答案 24 :(得分:0)

我觉得需要一个更完整的答案来描述它如何更彻底地工作。

首先,如果需要高级格式化,请查看how to use HTML in string resources上的手册。
然后,您可以使用<br/>等。但是,这需要使用代码设置文本。

如果只是纯文本,则有许多方法可以在静态string resources中转义换行符(LF)。

将字符串用双引号引起来

最干净的方法是将字符串用双引号引起来。
这样一来,空白就可以完全按照其显示的方式进行解释,而不会折叠。
然后,您可以简单地通常以这种方式使用换行符(不使用缩进)。

<string name="str1">"Line 1.
Line 2.
Line 3."</string>

请注意,某些字符在此模式下需要特殊的转义(例如\")。

下面的转义序列也可以在引用模式下工作。

在XML中使用单行表示多行字符串时

使用XML / HTML实体&#xA;&#10;来避开XML中换行符的最优雅方法是使用其代码点(十六进制为10或0xA)。这是转义任何字符的XML方法
但是,这似乎仅在引用模式下有效。

另一种方法是简单地使用\n,尽管它对可读性有负面影响,但在我看来(由于XML中不是特殊的转义序列,因此Android Studio不会突出显示它)。

<string name="str1">"Line 1.&#xA;Line 2.&#10;Line 3."</string>
<string name="str1">"Line 1.\nLine 2.\nLine 3."</string>
<string name="str1">Line 1.\nLine 2.\nLine 3.</string>

在任何这些转义序列之后,请勿包含换行符或任何空格,因为这将被解释为多余的空格。

答案 25 :(得分:-1)

使用这样的文本分隔符(\ n):

<string name="sample_string"><![CDATA[some test line 1 \n some test line 2]]></string>