Как добавить новую строку в TextView в Android?


253

Когда я определяю TextViewин xml, как добавить новую строку к нему? \nКажется, не работает.

<TextView
   android:id="@+id/txtTitlevalue"
   android:text="Line1: \n-Line2\n-Line3"
   android:layout_width="54dip"
   android:layout_height="fill_parent"
   android:textSize="11px" />

1
Ваш код работает на меня. Что вы получаете вместо многострочного текста?
Молнарм

2
В визуальном редакторе он отображается как текстовый \ n
Pentium10

Ответы:


293

Не доверяйте визуальному редактору. Ваш код работает в эму.


в моем случае визуальный редактор говорил правду. Добавлялся еще один обратный слеш для отображения обратного слеша. Правильным способом было поместить текст в XML-файл.
dp2050

79

Пытаться:

android:lines="2"

\n должно сработать.


1
мое текстовое представление может быть длиннее 2 строк. Это контроль. Это может быть что угодно.
падает Юпитера


38

Я думаю, что это как-то связано с вашим HTM.fromHtml(subTitle)звонком: «\ n» не означает «bupkis to HTML». Попробуйте <br/>вместо "\ n".


25
@androidevAlex Это потому, что это <br/>, а не </br>
Илья Коган

21

Сначала поместите это в текстовое представление:

android:maxLines="10"

Затем используйте \nв тексте вашего textview.

maxLines делает TextView не более чем на столько строк. Вы можете выбрать другой номер :)


19

Попробовав все вышесказанное, провел несколько собственных исследований, в результате чего было получено следующее решение для рендеринга escape-символов перевода строки:

string = string.replace("\\\n", System.getProperty("line.separator"));
  1. Используя метод замены, вам нужно отфильтровать экранированные переводы строк (например '\\\n')

  2. Только тогда каждый экземпляр '\n'escape-символов перевода строки будет преобразован в реальный перевод строки.

Для этого примера я использовал базу данных NoSQL сценариев Google Apps (ScriptDb) с данными в формате JSON.

Ура: D


1
Это сработало для меня: replace ("\\ n", System.getProperty ("line.separator"));
slott

скорее, string = string.replaceAll ("\\\ n", System.getProperty ("line.separator"));
user846316

10
<TextView
   android:id="@+id/txtTitlevalue"
   android:text="Line1: \r\n-Line2\r\n-Line3"
   android:layout_width="54dip"
   android:layout_height="fill_parent"
   android:textSize="11px" />

Я думаю, что это будет работать.


8

Мои 2 цента, используя Android TV.

Добавьте \nв XML строки, читая:

public void setSubtitle(String subtitle) {
    this.subtitle = subtitle.replace("\\n", System.getProperty("line.separator"));
}

8

Я просто решаю ту же проблему, поместите ниже атрибуты в XML

android:lines="2" android:maxLines="4" android:singleLine="false"

работай. Html.fromHtml("text1 <br> text2").toString()также работа.


Это все еще актуально, спасибо! У меня были maxLines, но у меня не было singleLine = false.
blast_hardcheese

Это единственное решение, которое сработало у меня. Спасибо!
Сайлас


7

Это решило мою проблему.

stringVar.replaceAll("\\\\n", "\\\n");


5

Один из способов сделать это - использовать Htmlтеги:

txtTitlevalue.setText(Html.fromHtml("Line1"+"<br>"+"Line2" + " <br>"+"Line3"));

5

Если вы выполните отладку, вы увидите, что строка на самом деле "\ \r\ \n"или "\ \n", т. Е. Она экранирована. Поэтому, если вы помассируете эту нить, чтобы избавиться от лишнего \, у вас будет решение. Это верно, особенно если вы читаете из базы данных.


5

Вам нужно поместить "\n"в strings.xmlфайл не в макете страницы.


Это сработало для меня, когда Visual Editor добавлял дополнительную обратную косую черту, пытаясь отобразить обратную косую черту в \ n
dp2050

4

Надо держать

1.android:maxLines="no of lines"

2. И использовать \nдля получения следующих строк


4

Для меня решение было добавить следующую строку в макет:

<LinearLayout
    xmlns:tools="http://schemas.android.com/tools"
    ...
    >

И \ n отображается как новая строка в визуальном редакторе. Надеюсь, поможет!


1
Я не уверен, связано ли это с вопросом :)
Сулейман

У меня была та же проблема, что вместо новой строки просто появилась строка "\ n". Когда я добавил строку выше, это уже не так, и появилась новая строка
Роб

1
Может быть, это потому, что вы использовали, tools:textа не android:textкак ОП, но в любом случае извините за беспокойство :)
Сулейман

Думаю, мне следовало бы уточнить это лучше, благодаря вашему комментарию, который я сейчас сделал :) Я использую, android:textя думаю, что это просто ошибка визуального редактора, как предполагает ответ на акцепт, но удобнее видеть его :)
Роб

Да, теперь я понимаю, вы правы, это более удобно :) спасибо
Сулейман

4

Также вы можете добавить &lt;br&gt;вместо\n.

И тогда вы можете добавить текст в TexView:

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

Не в XML вы не можете. Это дает ошибку компиляции - android:textне может содержать символы <или>.
Тимммм

3

Вам нужно положить \nв файлstring.xml

<string name="strtextparkcar">press Park my Car to store location \n</string>

2
 android:text="Previous Line &#10; Next Line" 

Это будет работать


Нет, это не так.
Shazbot

<TextView android: layout_width = "match_parent" android: layout_height = "wrap_content" android: singleLine = "false" android: text = "Предыдущая строка & # 10; Новая линия" /> Вам нужно запустить в эмуляторе, чтобы увидеть, как он работает. Спасибо
Вирусный Пармар

2

Просто попробуй:

Textview_name.settext("something \n  new line "):

В файле Java.


3
Пожалуйста, дайте правильный ответ на вопрос, в противном случае используйте комментарий
DjSh

1

Ответ RuDrA05 хорош: когда я редактирую XML на затмении, он не работает, но когда я редактирую XML с помощью notepad ++, он работает.

То же самое происходит, если я читаю текстовый файл, сохраненный с помощью eclipse или notepad ++

Возможно связано с кодировкой.


1

Это отлично работает. Проверьте это для вашего приложения.

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Text 1\nText 2\nText 3"/>

1

Примечание: капитализация текста с использованием

android:inputType="textCapCharacters"

или похожий, кажется, мешает \nработать.




0

для новой строки в TextView просто добавьте \ n в середине вашего текста, это работает ..


но ответ относится к ссылке на вопрос Не "ВАШ" вопрос ...
Нихил Борад

Боже мой, извините, я не уверен. Пожалуйста, измените свой ответ. Я изменил свой голос в пользу положительного.
Ранджит Кумар

1
эй, сначала отредактируйте свой ответ. иначе я не могу изменить свой голос.
Ранджит Кумар

0

Если TextView находится в любом макете (например, LinearLayout), попробуйте изменить атрибут ориентации на вертикальный, как android:orientation="vertical"для макета, или измените TextViewатрибут, android:singleLine="true"чтобы создать новую строку после него.


0

Программно: myTV.setText («Мой текст» + «\ n» + myString);


0

Создайте строку в вашем stings.xml

<resources>
    ...
    <string name="new_line">\u000A</string>
</resources>

Тогда в вашем коде ссылка на строку

val linkString = "This is in the first line.${getString(R.string.new_line)}This is on the second line."
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.