Comment ajouter une nouvelle ligne à une TextView dans Android?

253

Quand je définis un TextViewin xml, comment puis-je y ajouter une nouvelle ligne? \nsemble ne pas fonctionner.

<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
la source
1
Votre code fonctionne pour moi. Qu'obtenez-vous au lieu du texte multiligne?
molnarm
2
Dans l'éditeur visuel, il s'affiche sous forme de texte \ n
Pentium10

Réponses:

293

Ne faites pas confiance à l'éditeur visuel. Votre code fonctionne dans l'émeu.

Macarse
la source
eh bien, dans mon cas, l'éditeur visuel disait la vérité. Il ajoutait une autre barre oblique inverse pour afficher la barre oblique inverse. La bonne façon était de mettre le texte dans le fichier xml.
dp2050
79

Essayer:

android:lines="2"

\n devrait marcher.

Christian
la source
1
mon affichage de texte peut dépasser 2 lignes. C'est un contrôle. Cela peut être à peu près n'importe quoi.
dropsOfJupiter
44

essayer System.getProperty("line.separator");

kakopappa
la source
38

Je pense que cela a quelque chose à voir avec votre HTM.fromHtml(subTitle)appel: un "\ n" ne signifie pas des bupkis en HTML. Essayez <br/>au lieu de "\ n".

resnbl
la source
25
@androidevAlex C'est parce que c'est <br/>, pas </br>
Ilya Kogan
21

Tout d'abord, mettez ceci dans votre affichage de texte:

android:maxLines="10"

Utilisez ensuite \ndans le texte de votre affichage de texte.

maxLines fait que le TextView soit au plus grand de ces lignes. Vous pouvez choisir un autre numéro :)

un F.
la source
19

J'ai essayé tout ce qui précède, j'ai fait mes propres recherches, ce qui a abouti à la solution suivante pour le rendu des caractères d'échappement de saut de ligne:

string = string.replace("\\\n", System.getProperty("line.separator"));
  1. En utilisant la méthode replace, vous devez filtrer les sauts de ligne échappés (par exemple '\\\n')

  2. Ce n'est qu'alors que chaque instance de '\n'caractères d'échappement de saut de ligne est rendue dans le saut de ligne réel

Pour cet exemple, j'ai utilisé une base de données Google Apps Scripting noSQL (ScriptDb) avec des données formatées JSON.

Vive: D

Robert
la source
1
Cela a fonctionné pour moi: replace ("\\ n", System.getProperty ("line.separator"));
slott
à la place, 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" />

Je pense que cela fonctionnera.

user3578286
la source
8

Mes 2 cents, en utilisant Android TV.

Ajoutez \ndes chaînes XML en lisant:

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

Je viens de résoudre le même problème, je place les attributs ci-dessous en xml

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

travail. Html.fromHtml("text1 <br> text2").toString()fonctionnent également.

Ben Wong
la source
C'est toujours d'actualité, merci! J'avais maxLines, mais je n'avais pas singleLine = false.
blast_hardcheese
C'est la seule solution qui a fonctionné de moi. Merci!
Silas
8

Assurez-vous que votre \nest "\n"prêt à fonctionner.

Justin
la source
7

Cela a résolu mon problème.

stringVar.replaceAll("\\\\n", "\\\n");
viki
la source
6

System.getProperty("line.separator"); ce travail pour moi.

Joao Victor
la source
5

Une façon de le faire est d'utiliser des Htmlbalises ::

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

Si vous déboguez, vous verrez que la chaîne est en fait "\ \r\ \n"ou "\ \n", c'est-à-dire qu'elle est échappée. Donc, si vous massez cette corde, pour vous débarrasser de l'excédent \, vous aurez votre solution. Cela est particulièrement vrai si vous lisez à partir d'une base de données.

Tilottama Gaat
la source
5

Vous devez mettre le "\n"dans le strings.xmlfichier et non dans la mise en page.

epicness42
la source
Cela a fonctionné pour moi, où Visual Editor ajoutait des barres obliques inverses supplémentaires en essayant d'afficher la barre oblique inverse dans \ n
dp2050
4

Besoin de garder

1.android:maxLines="no of lines"

2.Et utiliser \npour obtenir les prochaines lignes

Danny
la source
4

Pour moi, la solution était d'ajouter la ligne suivante à la mise en page:

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

Et \ n apparaît comme une nouvelle ligne dans l'éditeur visuel. J'espère que ça aide!

Rob
la source
1
Je ne sais pas si c'est lié à la question :)
Suleyman
J'ai eu le même problème qu'au lieu d'une nouvelle ligne, la chaîne "\ n" venait de s'afficher. Quand j'ai ajouté la ligne ci-dessus, ce n'est plus le cas et la nouvelle ligne est apparue
Rob
1
Peut-être que c'est parce que vous utilisiez l'OP et que vous n'aimez tools:textpas android:text, mais de toute façon désolé de déranger :)
Suleyman
Je pense que j'aurais dû mieux le clarifier, grâce à votre commentaire que j'ai fait maintenant :) J'utilise android:textJe pense que c'est juste un bug de l'éditeur visuel, comme le suggère la réponse acceptée, mais il est plus confortable de pouvoir le voir :)
Rob
Ouais, je comprends maintenant, tu as raison c'est plus confortable :) merci
Suleyman
4

Vous pouvez également ajouter &lt;br&gt;au lieu de\n.

Et puis vous pouvez ajouter du texte à TexView:

articleTextView.setText(Html.fromHtml(textForTextView));
mobiledev Alex
la source
Pas dans le XML que vous ne pouvez pas. Il donne une erreur de compilation - android:textne peut pas contenir de caractères <ou>.
Timmmm
3

Vous devez mettre \nle fichierstring.xml

<string name="strtextparkcar">press Park my Car to store location \n</string>
simmash
la source
2
 android:text="Previous Line &#10; Next Line" 

Cela fonctionnera.

Viral Parmar
la source
Non, non.
shazbot
<TextView android: layout_width = "match_parent" android: layout_height = "wrap_content" android: singleLine = "false" android: text = "Ligne précédente & # 10; Nouvelle ligne" /> Vous devez exécuter l'émulateur pour le voir fonctionner. Merci
Viral Parmar
2

Essayez simplement:

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

Dans un fichier Java.

user11705013
la source
3
Veuillez fournir une réponse appropriée à la question, sinon utilisez le commentaire
DjSh
1

La réponse de RuDrA05 est bonne, lorsque je modifie le XML sur Eclipse, cela ne fonctionne pas, mais lorsque je modifie le XML avec notepad ++, cela fonctionne.

La même chose se produit si je lis un fichier txt enregistré avec eclipse ou notepad ++

Peut-être est lié à l'encodage.

Sebastian Corradi
la source
1

Cela fonctionne bien. Vérifiez-le pour votre application.

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

Note latérale: mise en majuscule du texte à l'aide

android:inputType="textCapCharacters"

ou similaire semble empêcher le \nde fonctionner.

Voy
la source
1

Assurez-vous que vous utilisez your_package.R et nonandroid.R

Dror
la source
1

Essaye ça:

android:text="Lorem Ipsum \nDolor Ait Amet \nLorem Ipsum"
Muss Mesmari
la source
0

pour la nouvelle ligne dans TextView, ajoutez simplement \ n au milieu de votre texte, cela fonctionne.

Nikhil Borad
la source
mais la réponse se rapporte au lien de la question Pas "VOTRE" question ...
Nikhil Borad
omg..désolé confus par moi.veuillez modifier votre réponse..Je change mon vote positif.
Ranjith Kumar
1
hé éditez d'abord votre réponse. sinon je ne peux pas changer mon vote.
Ranjith Kumar
0

Si le TextView est dans n'importe quelle mise en page (LinearLayout par exemple), essayez de changer l'attribut d'orientation en vertical comme android:orientation="vertical"pour la mise en page ou modifiez l' TextViewattribut android:singleLine="true"pour créer une nouvelle ligne après.

Pavani
la source
0

Par programmation: myTV.setText ("Mon texte" + "\ n" + maChaîne);

LKS
la source
0

Créez une chaîne dans votre stings.xml

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

Ensuite, dans votre code, référencez la chaîne

val linkString = "This is in the first line.${getString(R.string.new_line)}This is on the second line."
Trigve Hagen
la source