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" />

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.


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



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”.


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 :)


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


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.


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"));
}

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.


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,


7

To rozwiązało mój problem.

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


5

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

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

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.


5

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


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


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!


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));

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>

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

To zadziała.


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.


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.


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"/>

1

Uwaga dodatkowa: Używanie wielkich liter

android:inputType="textCapCharacters"

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


1

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



0

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


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ę.


0

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


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."
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.