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

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.


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.


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


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


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


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


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.


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

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.


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.


7

Cela a résolu mon problème.

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


5

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

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

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.


5

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


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


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!


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

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>

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

Cela fonctionnera.


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.


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.


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

1

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

android:inputType="textCapCharacters"

ou similaire semble empêcher le \nde fonctionner.


1

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



0

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


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.


0

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


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."
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.