web-dev-qa-db-fra.com

comment envelopper le texte dans TextView dans Android

Est-ce que quelqu'un sait comment insérer du texte dans TextView sur une plate-forme Android? C'est-à-dire que si le texte dans textview dépasse la longueur de l'écran, il doit être affiché dans la deuxième ligne.

J'ai cherché et essayé ce qui suit:

Android:scrollHorizontally="false",
Android:inputType="textMultiLine",
Android:singleLine="false"

Mais aucun ne fonctionne ..

Quelqu'un peut-il suggérer comment puis-je le faire ... je suis relativement nouveau sur la plate-forme Android ..

66
Sameer

Pour moi, ce problème ne s'est produit que sur Android <4.0.

La combinaison de paramètres que j'ai utilisée était:

Android:layout_weight="1"
Android:ellipsize="none"
Android:maxLines="100"
Android:scrollHorizontally="false"

Le nombre maxLines semblait être la dernière pièce aléatoire qui a enveloppé mon TextView.

45
Guykun

Dans le cas où la TextView est à l'intérieur d'une TableLayout, la solution consiste à définir Android:shrinkColumns="1" sur la TableLayout. (Remplacez 1 par le numéro de colonne dans lequel se trouve TextView que vous voulez habiller. (Indexé 0))

AFAICT, aucun autre attribut n'est requis sur la variable TextView.

Pour les autres cas, voir les autres réponses ici.

FWIW, je l’avais initialement eu à travailler en quelque sorte avec

 <TextView
   Android:id="@+id/inventory_text"
   Android:layout_width="fill_parent"
   Android:layout_weight="1"
   Android:width="0dp"

mais cela a créé un espace vide supplémentaire au bas de la boîte de dialogue.

29
aij

Disposition des contraintes

<TextView
Android:id="@+id/some_textview"
Android:layout_width="0dp"
Android:layout_height="wrap_content"

app:layout_constraintLeft_toLeftOf="@id/textview_above"
app:layout_constraintRight_toLeftOf="@id/button_to_right"/>
  • Assurez-vous que votre mise en page est nulle
  • les contraintes gauche/droite sont définies
  • la hauteur de disposition de wrap_content permet une expansion vers le haut ou vers le bas. 
  • Définissez Android:maxLines="2" pour empêcher l'expansion verticale (2 n'est qu'un exemple)
  • Les ellipses sont prob. une bonne idée avec max lines Android:ellipsize="end"

0dp width permet aux contraintes gauche/droite de déterminer la largeur de votre widget.

La définition des contraintes gauche/droite définit la largeur réelle de votre widget, dans laquelle le texte sera renvoyé à la ligne.

Documents de mise en page de contraintes

20
Baker

Vous devez utiliser 2 paramètres:

  • Android:ellipsize="none": le texte n'est pas coupé sur la largeur de la vue texte

  • Android:scrollHorizontally="false" le texte se termine sur autant de lignes que nécessaire

10
Kartaguez

Cela devrait résoudre votre problème: Android:layout_weight="1".

6
user755121

OK les gars la vérité est quelque part au milieu parce que vous devez voir le problème du point de vue du parent et de l'enfant. La solution ci-dessous fonctionne UNIQUEMENT lorsque le mode Spinner = dialog quelle que soit la version d'Android (pas de problème là-bas. Testé dans VD et DesireS avec Android => 2.2):

  1. . Définissez le mode de votre spinner (le parent) comme:

    Android:spinnerMode="dialog"  
    
  2. Définissez les propriétés de la vue texte (vue personnalisée enfant) sur:

    Android:layout_weight="1"  
    Android:ellipsize="none"  
    Android:maxLines="100"  
    Android:scrollHorizontally="false"
    

J'espère que cela fonctionne pour vous aussi.

5
spinboy

Dans Android Studio 2.2.3, sous la propriété inputType, il existe une propriété appelée textMultiLine. La sélection de cette option a réglé un problème similaire pour moi. J'espère que ça aide.

3
user7652193

En définissant Android:maxEms sur une valeur donnée en même temps que Android:layout_weight="1", le TextView sera renvoyé à la ligne une fois qu'il aura atteint la longueur donnée de la valeur em.

3
Freddroid

Je travaillais sur un TextView dans une mise en page dans un RecyclerView. J'avais un texte coupé, ex, pour Read this message, j'ai vu: Read this. J'ai essayé de régler Android:maxLines="2" sur le TextView, mais rien n'a changé. Cependant, Android:lines="2" a donné Read this sur la première ligne et message sur la 2e.

2
Stan Kurdziel

J'ai eu le même problème. Après le changement, ça a marché -

Android:layout_width="wrap_content"

Les symboles Ellipsis, maxLines ou layout_weight ne font pas de différence ..___ Remarque - La largeur du parent est également définie sur wrap_content.

1
Medha

Utilisez app:breakStrategy="simple" dans AppCompatTextView, il contrôlera la disposition des paragraphes.

Il a trois valeurs constantes

  • équilibré 
  • haute qualité
  • simple

Concevoir dans votre TextView xml

<Android.support.v7.widget.AppCompatTextView
        Android:id="@+id/textquestion"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:gravity="center"
        Android:scrollHorizontally="false"
        Android:text="Your Question Display Hear....Your Question Display Hear....Your Question Display Hear....Your Question Display Hear...."
        Android:textColor="@Android:color/black"
        Android:textSize="20sp"
        Android:textStyle="bold"
        app:breakStrategy="simple" />

Si votre niveau minimum actuel d'api est de 23 ou plus, dans Codage

yourtextview.setBreakStrategy(Layout.BREAK_STRATEGY_SIMPLE);

Pour plus de références, référez-vous BreakStrategy

 Textview breakStrategy image

1
Nirav Bhavsar

Vous pouvez utiliser le redimensionnement automatique de la bibliothèque de support pour TextViews, vérifiez ma réponse sur un thread similaire.

1
blueware

Vous devez ajouter votre TextView dans un ScrollView avec quelque chose comme ceci:

<ScrollView Android:id="@+id/SCROLL_VIEW"  
Android:layout_height="150px"   
Android:layout_width="fill_parent">  

<TextView   
   Android:id="@+id/TEXT_VIEW"   
   Android:layout_height="wrap_content"   
   Android:layout_width="wrap_content"   
   Android:text="This text view should act as header This text view should act as header This text view should act as header This text view should act as header This text view should act as header This text view should act as header This text view should act as header" />  
 </ScrollView>
0
Ludovic Landry

Tout ce que vous avez à faire est de définir votre largeur textview .

Android: layout_width = "60dp"

vous pouvez changer la largeur à votre choix. Il suffit de taper phrase longue pour vérifier si cela fonctionne comme ça

Android: text = "je veux être parmi les meilleurs ingénieurs en logiciel"

0
user8470132

Essayez l'approche de @ Guykun et assurez-vous que la largeur des parents n'est pas configurée pour envelopper le contenu. C'est la chose qui me manquait.

0
Shailendra Suriyal

Le moyen facile de faire cela:

Android:layout_width="match_parent"
Android:layout_height="wrap_content"

Il va envelopper le texte par défaut

0
Alen Lee

Il suffit de définir layout_with sur une taille définie. Lorsque le texte remplit la largeur maximale, il débordera à la ligne suivante, ce qui provoquera un effet d’enveloppe.

<TextView
    Android:id="@+id/segmentText"
    Android:layout_marginTop="10dp"
    Android:layout_below="@+id/segmentHeader"
    Android:text="You have the option to record in one go or segments(if you swap options 
    you will loose your current recordings)"
    Android:layout_width="300dp"
    Android:layout_height="wrap_content"/>
0
Frank Odoom

J'utilise Android 2.2 et ma vue textuelle passera automatiquement à la ligne suivante si elle dépasse l'écran.

Si vous souhaitez que le texte passe à la ligne suivante avant la fin de l'écran, ajoutez-y simplement (insérez simplement votre propre valeur dp). Cela sera utile si vous avez une image à droite du texte.

Android:layout_marginRight="52dp"
0
Britc

C'est assez étrange - j'ai créé ma TextView dans Code et elle est enveloppée - bien que je ne définisse rien d'autre que des éléments standard - mais voyez vous-même:

LinearLayout.LayoutParams childParams = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT);
childParams.setMargins(5, 5, 5, 5);

Label label = new Label(this);
label.setText("This is a testing label This is a testing label This is a testing label This is a testing labelThis is a testing label This is a testing label");
label.setLayoutParams(childParams);

Comme vous pouvez le voir dans la définition de params, j'utilise un LinearLayout. La classe Label étend simplement TextView - ne fait rien sauf la définition de la taille et de la couleur de la police.

Lors de son exécution dans l'émulateur (API niveau 9), le texte est automatiquement enroulé sur 3 lignes.

0
Ready4Android