Como adiciono uma nova linha a um TextView no Android?


253

Quando defino um TextViewin xml, como adiciono uma nova linha a ele? \nparece não funcionar.

<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
Seu código funciona para mim. O que você recebe em vez do texto de múltiplas linhas?
molnarm

2
No editor visual, ele é mostrado como textual \ n
Pentium10 15/05

Respostas:


293

Não confie no editor Visual. Seu código funciona na ema.


bem, no meu caso, o editor visual estava dizendo a verdade. Ele estava adicionando outra barra invertida para exibir a barra invertida. A maneira correta foi colocar o texto dentro do arquivo xml.
dp2050 7/04

79

Experimentar:

android:lines="2"

\n Deveria trabalhar.


1
minha visualização de texto pode ter mais de 2 linhas. É um controle. Pode ser qualquer coisa.
dropsOfJupiter


38

Eu acho que isso tem algo a ver com a sua HTM.fromHtml(subTitle)chamada: um "\ n" não significa bupkis para HTML. Tente em <br/>vez de "\ n".


25
@androidevAlex Isso é porque é <br/>, não </br>
Ilya Kogan

21

Primeiro, coloque isso na sua visualização de texto:

android:maxLines="10"

Então use \n o texto da sua visualização de texto.

maxLines faz com que o TextView tenha no máximo esse número de linhas. Você pode escolher outro número :)


19

Tentei tudo isso acima, fiz algumas pesquisas, resultando na seguinte solução para renderizar caracteres de escape de feed de linha:

string = string.replace("\\\n", System.getProperty("line.separator"));
  1. Usando o método de substituição, você precisa filtrar as alimentações de linha com escape (por exemplo '\\\n')

  2. Somente então cada instância dos '\n'caracteres de escape do feed de linha é renderizada no feed de linha real

Para este exemplo, usei um banco de dados noSQL (ScriptDb) do Google Apps com dados formatados em JSON.

Saúde: D


1
Isso funcionou para mim: replace ("\\ n", System.getProperty ("line.separator"));
Página

em vez disso, 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" />

Eu acho que isso vai funcionar.


8

Meus 2 centavos, usando Android TV.

Adicione \ncadeias XML, enquanto lê:

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

8

Eu apenas resolvo o mesmo problema, coloque abaixo os atributos em xml

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

trabalhos. Html.fromHtml("text1 <br> text2").toString()também funciona.


Isso ainda é relevante, obrigado! Eu tinha maxLines, mas não tinha singleLine = false.
blast_hardcheese

Esta é a única solução que funcionou comigo. Obrigado!
Silas

8

Verifique se você \nestá preparado "\n"para que ele funcione.


7

Isso resolveu meu problema.

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


5

Uma maneira de fazer isso é usar Htmltags:

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

5

Se você depurar, verá que a string é realmente "\ \r\ \n"ou "\ \n", ou seja, escapou. Então, se você massagear essa corda, para se livrar do extra \, terá sua solução. Isso é verdade especialmente se você estiver lendo de um banco de dados.


5

Você precisa colocar o "\n"no strings.xmlarquivo não dentro do layout da página.


Isso funcionou para mim, onde o Visual Editor estava adicionando barras invertidas extras tentando exibir a barra in \ n
dp2050

4

Precisa manter

1android:maxLines="no of lines"

2.E use \npara obter as próximas linhas


4

Para mim, a solução foi adicionar a seguinte linha ao layout:

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

E \ n aparece como uma nova linha no editor visual. Espero que ajude!


1
Eu não tenho certeza se ele está relacionado com a questão :)
Suleyman

Eu tive o mesmo problema que, em vez de uma nova linha, a string "\ n" apenas apareceu. Quando eu adicionei a linha acima desta wans't mais o caso ea nova linha apareceu
Rob

1
Talvez seja porque você estava usando tools:texte não android:textcomo o OP, mas mesmo assim muito por perturbar :)
Suleyman

Eu acho que deveria ter esclarecido melhor, graças ao seu comentário que fiz agora :) Eu uso android:textEu acho que é apenas um bug do editor visual, como a resposta do Acceptet sugere, mas é mais confortável poder vê-lo :)
Rob

Sim, eu entendo agora, você está certo, é mais confortável :) graças
Suleyman

4

Além disso, você pode adicionar em &lt;br&gt;vez de\n.

E então você pode adicionar texto ao TexView:

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

Não no XML que você não pode. Dá um erro de compilação - android:textnão pode conter caracteres <ou>.
Timmmm

3

Você precisa colocar \nno arquivostring.xml

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

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

Isso vai funcionar.


Não, não faz.
Shazbot 11/08/19

<TextView android: layout_width = "match_parent" android: layout_height = "wrap_content" android: singleLine = "false" android: text = "Linha anterior & # 10; Nova linha" /> Você precisa executar no emulador para vê-lo funcionar. Obrigado
Viral Parmar

2

Apenas tente:

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

No arquivo Java.


3
Por favor, forneça uma resposta para a pergunta, caso contrário use comentário
DjSh

1

A resposta do RuDrA05 é boa: quando edito o XML no eclipse, ele não funciona, mas quando edito o XML com o bloco de notas ++, ele funciona.

O mesmo está acontecendo se eu ler um arquivo txt salvo com eclipse ou notepad ++

Talvez esteja relacionado à codificação.


1

Isso funciona bem. Verifique o seu aplicativo.

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

1

Nota lateral: Capitalizar texto usando

android:inputType="textCapCharacters"

ou similar parece impedir o \ntrabalho.


1

Verifique se você está usando your_package.R e nãoandroid.R


1

Tente o seguinte:

android:text="Lorem Ipsum \nDolor Ait Amet \nLorem Ipsum"

0

para a nova linha no TextView, basta adicionar \ n no meio do seu texto.


mas a resposta relaciona-se com a questão ligação Not "SEU" pergunta ...
Nikhil Borad

omg..Desculpe confuso por mim.Por favor, edite sua resposta .. Eu mudo meu voto positivo.
Ranjith Kumar

1
Ei, primeiro edite sua resposta. senão não posso mudar meu voto.
Ranjith Kumar

0

Se o TextView estiver em qualquer Layout (LinearLayout, por exemplo), tente alterar o atributo de orientação para vertical como android:orientation="vertical"para o layout ou altere o TextViewatributo android:singleLine="true"para criar uma nova linha depois dele.


0

Programaticamente: myTV.setText ("Meu Texto" + "\ n" + myString);


0

Crie uma sequência em seu stings.xml

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

Então, no código de referência, a string

val linkString = "This is in the first line.${getString(R.string.new_line)}This is on the second line."
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.