Как добавить новую строку в 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" />
Pentium10
источник
1
Ваш код работает на меня. Что вы получаете вместо многострочного текста?
Молнарм
2
В визуальном редакторе он отображается как текстовый \ n
Pentium10

Ответы:

293

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

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

Пытаться:

android:lines="2"

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

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

пытаться System.getProperty("line.separator");

kakopappa
источник
38

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

resnbl
источник
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" />

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

user3578286
источник
8

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

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

public void setSubtitle(String subtitle) {
    this.subtitle = subtitle.replace("\\n", System.getProperty("line.separator"));
}
ATOzTOA
источник
8

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

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

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

Бен Вонг
источник
Это все еще актуально, спасибо! У меня были maxLines, но у меня не было singleLine = false.
blast_hardcheese
Это единственное решение, которое сработало у меня. Спасибо!
Сайлас
8

Убедитесь , что ваш \nнаходится в "\n"для его работы.

Джастин
источник
7

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

stringVar.replaceAll("\\\\n", "\\\n");
Viki
источник
6

System.getProperty("line.separator"); эта работа для меня.

Жоао Виктор
источник
5

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

txtTitlevalue.setText(Html.fromHtml("Line1"+"<br>"+"Line2" + " <br>"+"Line3"));
Garry
источник
5

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

Тилоттама Гаат
источник
5

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

epicness42
источник
Это сработало для меня, когда 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>
simmash
источник
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.

user11705013
источник
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работать.

Voy
источник
1

Убедитесь, что вы используете, your_package.R а неandroid.R

Дрор
источник
1

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

android:text="Lorem Ipsum \nDolor Ait Amet \nLorem Ipsum"
Мусс Месмари
источник
0

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

Нихил Борад
источник
но ответ относится к ссылке на вопрос Не "ВАШ" вопрос ...
Нихил Борад
Боже мой, извините, я не уверен. Пожалуйста, измените свой ответ. Я изменил свой голос в пользу положительного.
Ранджит Кумар
1
эй, сначала отредактируйте свой ответ. иначе я не могу изменить свой голос.
Ранджит Кумар
0

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

Pavani
источник
0

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

LKS
источник
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."
Тригве Хаген
источник