Jak dodać nowy wiersz do TextView w Androidzie?

253

Kiedy zdefiniować TextViewin xml, jak mogę dodać nową linię do niego? \nwydaje się nie działać.

<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
źródło
1
Twój kod działa dla mnie. Co otrzymujesz zamiast tekstu wielowierszowego?
molnarm
2
W edytorze wizualnym pokazuje się jako tekstowy \ n
Pentium10

Odpowiedzi:

293

Nie ufaj edytorowi Visual. Twój kod działa w emu.

Makaron
źródło
cóż, w moim przypadku edytor wizualny mówił prawdę. Dodano kolejny ukośnik odwrotny, aby wyświetlić ukośnik odwrotny. Prawidłowym sposobem było umieszczenie tekstu w pliku xml.
dp2050
79

Próbować:

android:lines="2"

\n powinno działać.

chrześcijanin
źródło
1
mój widok tekstu może być dłuższy niż 2 linie. To kontrola. Może to być wszystko.
dropsOfJupiter
44

próbować System.getProperty("line.separator");

kakopappa
źródło
38

Myślę, że ma to coś wspólnego z twoją HTM.fromHtml(subTitle)rozmową: „\ n” nie oznacza bupkis do HTML. Spróbuj <br/>zamiast „\ n”.

resnbl
źródło
25
@androidevAlex To dlatego, że jest <br/>, a nie </br>
Ilya Kogan
21

Najpierw umieść to w widoku tekstu:

android:maxLines="10"

Następnie użyj \nw tekście widoku tekstu.

maxLines sprawia, że ​​TextView ma co najwyżej tyle linii. Możesz wybrać inny numer :)

aF.
źródło
19

Wypróbowałem wszystkie powyższe, przeprowadziłem własne badania, w wyniku których otrzymałem następujące rozwiązanie do renderowania znaków specjalnych ucieczki linii:

string = string.replace("\\\n", System.getProperty("line.separator"));
  1. Korzystając z metody replace, musisz filtrować znaki ucieczki linii (np. '\\\n')

  2. Dopiero wtedy każde wystąpienie '\n'znaków ucieczki linii jest renderowane do rzeczywistego kanału

W tym przykładzie użyłem bazy danych Google Apps Scripting noSQL (ScriptDb) z danymi sformatowanymi w JSON.

Pozdrawiam: D

Robert
źródło
1
Działa to dla mnie: replace ("\\ n", System.getProperty ("line.separator"));
slott,
raczej 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" />

Myślę, że to zadziała.

użytkownik3578286
źródło
8

Moje 2 centy za pomocą Android TV.

Dodaj \nciągi XML podczas czytania:

public void setSubtitle(String subtitle) {
    this.subtitle = subtitle.replace("\\n", System.getProperty("line.separator"));
}
ATOzTOA
źródło
8

Właśnie rozwiązuję ten sam problem, umieszczam poniższe atrybuty w xml

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

praca. Html.fromHtml("text1 <br> text2").toString()też działa.

Ben Wong
źródło
To jest nadal aktualne, dzięki! Miałem maxLines, ale nie miałem singleLine = false.
blast_hardcheese
To jedyne rozwiązanie, które działało ode mnie. Dzięki!
Silas,
8

Upewnij się, że \nznajduje się w "\n"za nią do pracy.

Justin
źródło
7

To rozwiązało mój problem.

stringVar.replaceAll("\\\\n", "\\\n");
viki
źródło
6

System.getProperty("line.separator"); ta praca dla mnie.

Joao zwycięzca
źródło
5

Jednym ze sposobów na to jest użycie Htmltagów:

txtTitlevalue.setText(Html.fromHtml("Line1"+"<br>"+"Line2" + " <br>"+"Line3"));
garry
źródło
5

Jeśli debugujesz, zobaczysz, że łańcuch jest faktycznie "\ \r\ \n"lub "\ \n", tzn., Że jest uciekany. Więc jeśli masujesz ten sznurek, aby pozbyć się dodatkowych \, będziesz miał swoje rozwiązanie. Jest to szczególnie ważne, jeśli czytasz z bazy danych.

Tilottama Gaat
źródło
5

Musisz umieścić "\n"w strings.xmlpliku poza układem strony.

epopeja42
źródło
To działało dla mnie, gdy Visual Editor dodawał dodatkowe ukośniki odwrotne, próbując wyświetlić ukośnik odwrotny w \ n
dp2050
4

Trzeba zachować

1.android:maxLines="no of lines"

2. I użyj \ndo uzyskania kolejnych linii

Danny
źródło
4

Dla mnie rozwiązaniem było dodanie następującej linii do układu:

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

I \ n pojawia się jako nowy wiersz w edytorze wizualnym. Mam nadzieję, że to pomoże!

Obrabować
źródło
1
Nie jestem pewien, czy ma to związek z pytaniem :)
Suleyman,
Miałem ten sam problem, że zamiast nowej linii właśnie pojawił się ciąg „\ n”. Kiedy dodałem powyższą linię, już tak nie jest i pojawiła się nowa linia
Rob
1
Może to dlatego, że używasz tools:texti nie android:textlubisz OP, ale i tak przepraszam, że przeszkadzam :)
Suleyman
Myślę, że powinienem to wyjaśnić lepiej, dzięki twojemu komentarzowi, który teraz zrobiłem :) Używam android:textMyślę, że to tylko błąd edytora wizualnego, jak sugeruje odpowiedź acceptet, ale wygodniej jest go zobaczyć :)
Rob
Tak, rozumiem teraz, masz rację, jest wygodniej :) dzięki
Suleyman
4

Możesz także dodać &lt;br&gt;zamiast\n.

A następnie możesz dodać tekst do TexView:

articleTextView.setText(Html.fromHtml(textForTextView));
mobiledev Alex
źródło
Nie w pliku XML, którego nie możesz. Daje błąd kompilacji - android:textnie może zawierać znaków <lub>.
Timmmm,
3

Musisz umieścić \nw plikustring.xml

<string name="strtextparkcar">press Park my Car to store location \n</string>
simmash
źródło
2
 android:text="Previous Line &#10; Next Line" 

To zadziała.

Viral Parmar
źródło
Nie, nie ma.
shazbot,
<TextView android: layout_width = "match_parent" android: layout_height = "wrap_content" android: singleLine = "false" android: text = "Poprzednia linia & # 10; Nowa linia" /> Musisz uruchomić w emulatorze, aby działał. Dzięki
Viral Parmar
2

Spróbuj:

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

W pliku Java.

użytkownik11705013
źródło
3
Podaj poprawną odpowiedź na pytanie, w przeciwnym razie użyj komentarza
DjSh
1

Odpowiedź RuDrA05 jest dobra, kiedy edytuję XML przy zaćmieniu, to nie działa, ale kiedy edytuję XML za pomocą notatnika ++, DZIAŁA.

To samo dzieje się, gdy czytam plik txt zapisany za pomocą Eclipse lub Notepad ++

Może ma to związek z kodowaniem.

Sebastian Corradi
źródło
1

To działa dobrze. Sprawdź swoją aplikację.

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Text 1\nText 2\nText 3"/>
Palani Kumar
źródło
1

Uwaga dodatkowa: Używanie wielkich liter

android:inputType="textCapCharacters"

lub podobny wydaje się przestać \ndziałać.

Voy
źródło
1

Upewnij się, że używasz, your_package.R a nieandroid.R

Dror
źródło
1

Spróbuj tego:

android:text="Lorem Ipsum \nDolor Ait Amet \nLorem Ipsum"
Muss Mesmari
źródło
0

dla nowego wiersza w TextView po prostu dodaj \ n w środku tekstu, to działa ..

Nikhil Borad
źródło
ale odpowiedź dotyczy linku do pytania Nie pytanie „TWOJE” ...
Nikhil Borad,
omg..sorry mylone przeze mnie. proszę edytować swoją odpowiedź .. Zmieniam mój głos pozytywnie.
Ranjith Kumar,
1
hej, najpierw edytuj swoją odpowiedź. inaczej nie mogę zmienić swojego głosu.
Ranjith Kumar,
0

Jeśli TextView jest w dowolnym układzie (na przykład LinearLayout), spróbuj zmienić atrybut orientacji na pionowy jak android:orientation="vertical"dla układu lub zmień TextViewatrybut, android:singleLine="true"aby utworzyć po nim nową linię.

Pavani
źródło
0

Programowo: myTV.setText („Mój tekst” + „\ n” + myString);

LKS
źródło
0

Utwórz ciąg w pliku stings.xml

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

Następnie w tobie odwołaj się do ciągu

val linkString = "This is in the first line.${getString(R.string.new_line)}This is on the second line."
Trigve Hagen
źródło