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

我试图在 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

我错过了什么吗?

357910 次浏览

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

好吧,我明白了:

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

因此,在 CDATA 中包装是必要的,并且在 html 标记中添加了中断

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

这是 < br & # 47; > 的 HTML 转义代码

然后你可以向 TexView 添加文本:

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

\n为我工作,就像这样:

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

如果将字符串资源值放在如下引号中,则换行(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>

是的,就这么简单。

Android 版本1.6不能识别 r n。 相反,应该使用: System.getProperty (“ line.different ator”)

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

尝试了以上所有方法,我自己做了一些研究,得出了下面这个渲染换行字符的解决方案:

string = string.replace("\\\n", System.getProperty("line.separator"));
  1. 使用替换方法,您需要过滤 逃跑了 linefeeds (例如’n’)

  2. 只有这样,每个 line feed’n’escape 字符实例才会被呈现到实际的 linefeed 中

对于这个示例,我使用了一个带有 JSON 格式数据的 GoogleApps ScriptingnoSQL 数据库(ScriptDb)。

干杯: D

我使用以下方法:

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

这招对我很管用

android:text="First \n Second"

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

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

有两种解决办法。 如果将字符串用作原始字符串,则需要使用换行符 如果使用 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>

使用 Android Studio 0.8.9。对我来说唯一有效的方法就是使用 \n。 用 CDATA 或 <br><br />包装都不起作用。

试着再次检查你的定位。 可能,您试图编辑一个文件(本地化) ,但实际上使用另一个程序,就像我一样。默认的系统语言是俄语,而我试图编辑英语本地化。

在我的例子中,工作解决方案是使用“ n”作为行分隔符:

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

非常简单: 使用“ n”

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

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

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

这可以追溯到最早的打字机,在那里你可以选择只进行换行(并且只输入低一行) ,或者换行 + 回车(也移动到一行的开头)

在 Android/java 中,n 对应于一个回车符 + 换行符,否则你只会“覆盖”同一行

我发现了另一种方法: 需要添加“ Android: maxWidth = “40dp””属性。 当然,它可能不能完美地工作,但它给了一个线的突破。

你也可以使用 Android Studio 的字符串编辑器,它会自动生成线性刹车之类的东西..。

由于 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;
}

最简单的方法是转到值/字符串(在资源文件夹中)

在这里声明一个字符串:

    <string name="example_string">Line 1\Line2\Line n</string>

在特定的 xml 文件中,只需调用字符串,如

    <TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/example_string" />

N 不适合我。通过将 xml 更改为 text 并构建 textview text 属性(如下所示) ,我能够解决这个问题。

android:text="Line 1
Line 2
Line 3


DoubleSpace"

希望这能帮助那些说 n 不适合他们的人。

我从一个文件中读取文本,所以我采用了 有点不同的方法,因为向文件中添加 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());

也许你可以把 如果放到文本中,但是它不显示?确保您有足够的高度控制。例如:

正确:

android:layout_height="wrap_content"

也许是错的:

android:layout_height="10dp"

在我的例子中,我通过添加以下内容解决了这个问题:

android:inputType="textMultiLine"

我建议查询 line.separator属性,并在需要添加换行符时使用该属性。

下面是一些示例代码:

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

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

首先,如果您需要高级格式,请查看 如何在字符串资源中使用 HTML手册。
然后您可以使用 <br/>等等,但是,这需要使用代码设置文本。

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

用双引号括起字符串

最简洁的方法是用双引号括起字符串。
这将使空格按照它看起来的样子进行解释,而不是折叠起来。
然后您可以简单地 在此方法中通常使用换行符(不使用缩进)。

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

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

下面的转义序列也在引号模式下工作。

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

在 XML 中转义换行符的最好方法是使用其 XML/HTML 实体 &#xA;&#10;来转义其代码点(十六进制的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>

不要在这些转义序列之后包含换行符或任何空格,因为那将被解释为额外的空格。

正如我所知道的,在以前的版本的 android 工作室使用单独的行“ n”代码。但是新的(4.1.2)使用“ < br/”来分隔行。例如- 旧的那个:

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

最新消息:

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