web-dev-qa-db-fra.com

Android, Comment limiter la largeur de TextView (et ajouter trois points à la fin du texte)?

J'ai une TextView que je veux limiter les caractères de celle-ci. En fait, je peux le faire, mais je cherche comment ajouter trois points (...) à la fin de la chaîne. Celui-ci montre que le texte a continué. Ceci est mon XML mais il n'y a pas de points bien que cela limite mon texte.

<TextView 
        Android:id                      = "@+id/tvFixture"
        Android:layout_width            = "wrap_content"
        Android:layout_height           = "wrap_content"
        Android:layout_toLeftOf         = "@id/ivFixture_Guest"
        Android:text                    = "@string/test_06"
        Android:lines                   = "1"
        Android:ems                     = "3"
        Android:gravity                 = "right"
        style                           = "@style/simpletopic.black" 
        Android:ellipsize="end"/>
247
Hesam

Obsolète:

Ajouter une propriété Android:singleLine="true" de plus dans votre Textview 

Mis à jour:

Android:ellipsize="end" 
Android:maxLines="1"
544
Azhar Shaikh

Ce qui suit est ce que j’ai appris en jouant avec diverses options permettant de forcer un TextView à une seule ligne (avec et sans les trois points).

enter image description here

Android: maxLines = "1"

<TextView
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:maxLines="1"
    Android:text="one two three four five six seven eight nine ten" />

Cela force simplement le texte à une ligne. Tout texte supplémentaire est caché. 

En relation:

ellipsize = "end"

<TextView
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:maxLines="1"
    Android:ellipsize="end"
    Android:text="one two three four five six seven eight nine ten" />

Cela coupe le texte qui ne rentre pas, mais permet aux utilisateurs de savoir que le texte a été tronqué en ajoutant un Ellipsis (les trois points). 

En relation:

ellipsize = "Marquee"

<TextView
    Android:id="@+id/MarqueeText"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:maxLines="1"
    Android:singleLine="true"
    Android:ellipsize="Marquee"
    Android:focusable="true"
    Android:focusableInTouchMode="true"
    Android:text="one two three four five six seven eight nine ten" />

Cela fait défiler le texte automatiquement dans TextView. Notez que parfois il doit être défini dans le code:

textView.setSelected(true);

Soi-disant, Android:maxLines="1" et Android:singleLine="true" devraient faire essentiellement la même chose et puisque singleLine est apparemment obsolète je préférerais ne pas l'utiliser, mais lorsque je le retire, le Marquee ne défile plus. Prendre maxLines n'affecte pas cela, cependant.

En relation:

HorizontalScrollView avec scrollHorizontally

<HorizontalScrollView
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:id="@+id/horizontalScrollView">

    <TextView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:maxLines="1"
        Android:scrollHorizontally="true"
        Android:text="one two three four five six seven eight nine ten" />
</HorizontalScrollView>

Cela permet à l'utilisateur de faire défiler manuellement pour voir toute la ligne de texte.

138
Suragch

Essayez cette propriété de TextView dans votre fichier de mise en page.

Android:ellipsize="end"
Android:maxLines="1"
78
Niranj Patel

Je suppose que vous voulez limiter la largeur à une ligne et non la limiter par caractère? Puisque singleLine est obsolète, vous pouvez essayer d’utiliser les éléments suivants ensemble:

Android:maxLines="1"
Android:scrollHorizontally="true"
Android:ellipsize="end"
30
Muz

par exemple. vous pouvez utiliser 

Android:maxLength="13"

cela limitera la longueur de texview à 13 mais le problème est que si vous essayez d'ajouter 3 points (...), il ne l'affichera pas, car il fera partie de la longueur de textview. 

     String userName;
     if (data.length() >= 13) {
            userName = data.substring(0, 13)+ "...";

     } else {

            userName = data;

    }
        textView.setText(userName);

en dehors de cela, vous devez utiliser

 Android:maxLines="1"
10
Nayanesh Gupte

J'ai obtenu le résultat souhaité en utilisant 

Android:maxLines="2"
Android:minLines="2"
Android:ellipsize="end"

L'astuce consiste à définir maxLines et minLines sur la même valeur ... et pas seulement Android: lines = "2", ne faites pas l'affaire. En outre, vous évitez tous les attributs obsolètes.

5
user1974433

code:

TextView your_text_view = (TextView) findViewById(R.id.your_id_textview);
your_text_view.setEllipsize(TextUtils.TruncateAt.END);

xml:

Android:maxLines = "5"

par exemple.

Dans Matthieu 13, les disciples ont demandé à Jésus pourquoi il avait parlé à la foule en paraboles. Il répondit: "Il vous a été donné de connaître les mystères du royaume des cieux, mais cela ne leur a pas été donné.

Sortie: Dans Matthieu 13, les disciples ont demandé à Jésus pourquoi il avait parlé à la foule en paraboles. Il a répondu: "Il vous a été donné de savoir ...

4
richardj

J'utilise Horizonal Recyclerview. 
1) Ici, dans CardView, TextView est déformé verticalement lorsqu’on utilise 

Android:ellipsize="end"
Android:maxLines="1"

Vérifiez les caractères gras TextViews Wyman Group, Jaskolski ...  enter image description here

2) Mais quand j’utilisais singleLine avec ellipsize - 

Android:ellipsize="end"
Android:singleLine="true"

Vérifiez les caractères gras TextViews Wyman Group, Jaskolski ...  enter image description here

La 2ème solution a fonctionné correctement pour moi (avec singleLine). Aussi, j'ai testé dans la version OS: 4.1 et supérieur (jusqu'à 8.0), ça fonctionne très bien, sans aucun crash.

4
Varad Mondkar

Vous pouvez limiter le nombre de caractères de votre texte et ajouter (...) après le texte. Supposons que vous n’ayez besoin d’afficher que 5 lettres, puis (...), procédez comme suit:

String YourString = "abcdefghijk";

if(YourString.length()>5){

YourString  =  YourString.substring(0,4)+"...";

your_text_view.setText(YourString);
}else{

 your_text_view.setText(YourString); //Dont do any change

}

un petit bidouillage ^ _ ^. Bien que ce ne soit pas une bonne solution. Mais un travail qui a fonctionné pour moi: D

EDIT: J'ai ajouté check pour moins de caractère selon votre nombre limité. de caractères.

4
TheLittleNaruto

Afin de travailler avec le Android: ellipsize attribut, vous devez limiter la largeur de la présentation du TextView, de sorte que le text soit hors de portée de TextView. .

Ainsi, Android: layout_width attribut joue un rôle clé ici, définissez-le en conséquence.

Un exemple peut être:

<TextView        
    Android:layout_width="120dp"
    Android:layout_height="wrap_content"
    Android:ellipsize="end"
    Android:text="This is a very long text to be displayed"
    Android:textSize="12sp"
    Android:maxLines="1"            
     />

Maintenant, voici si text dans Android: text = "Ceci est un très long texte à afficher" n'est pas visible de TextView avec un Android: layout_width = "120dp" , Android: ellipsize = "end" tronquera le texte et placera ... (3 points) après. c'est-à-direCeci est très long ...sera affiché dans le TextView.

3
Androwed

Vous devez ajouter les lignes suivantes dans votre mise en page pour la visualisation de texte

Android:maxLines="1"
Android:ellipsize="end"
Android:singleLine="true"

J'espère que cela fonctionne pour toi.

3
Mayank Bhatnagar

Je pense que vous donnez une hauteur et une largeur fixes à la vue du texte. Ensuite, votre solution fonctionnera.

2

vous pouvez écrire cette ligne au format xml où vous prenez la textview:

Android:singleLine="true"
2
Jay Thakkar

L'approche de @AzharShaikh fonctionne bien.

Android:ellipsize="end"
Android:maxLines="1"

Mais je réalise qu’un problème est que TextView sera tronqué par Word (par défaut). Montrer si nous avons un texte comme:

test long_line_without_any_space_abcdefgh

le TextView affichera:

test ...

Et j'ai trouvé une solution pour gérer ce problème, remplacer les espaces par le caractère unicode no-space space, cela permet à TextView d'envelopper des caractères au lieu de mots:

yourString.replace(" ", "\u00A0");

Le résultat:

test long_line_without_any_space_abc ...

1
        <TextView
            Android:id="@+id/product_description"
            Android:layout_width="165dp"
            Android:layout_height="wrap_content"
            Android:layout_marginTop="2dp"
            Android:paddingLeft="12dp"
            Android:paddingRight="12dp"
            Android:text="Pack of 4 summer printed pajama"
            Android:textColor="#d2131c"
            Android:textSize="12sp"
            Android:maxLines="2"
            Android:ellipsize="end"/>
1
kamran rahmatullah

Ajouter ces deux lignes dans votre texte

Android:ellipsize="end"
Android:singleLine="true"
1
SANJAY GUPTA

vous pouvez le faire par xml:

<TextView 
    Android:id="@+id/textview"
    Android:maxLines="1" // or any number of lines you want
    Android:ellipsize="end"
    />
0
Khalid Taha

Utilisation 

  • Android:singleLine="true"
  • Android:maxLines="1"
  • app:layout_constrainedWidth="true"

Voici comment se présente ma TextView complète:

    <TextView
    Android:id="@+id/message_title"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_marginStart="5dp"
    Android:maxLines="1"
    Android:singleLine="true"
    Android:text="NAME PLACEHOLDER MORE Text"
    Android:textColor="@Android:color/black"
    Android:textSize="16sp"

    Android:textStyle="bold"
    app:layout_constrainedWidth="true"
    app:layout_constraintEnd_toStartOf="@id/message_check_sign"
    app:layout_constraintHorizontal_bias="0"
    app:layout_constraintStart_toEndOf="@id/img_chat_contact"
    app:layout_constraintTop_toTopOf="@id/img_chat_contact" />

Picture of <code>TextView</code>

0
kyrylo_23

Vous venez de changer 

Android: layout_width = "wrap_content"

utiliser cette ligne ci-dessous

Android: layout_width = "match_parent"

<LinearLayout
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_centerVertical="true"
            Android:layout_marginLeft="10dp"
            Android:layout_marginTop="10dp"
            Android:layout_toRightOf="@+id/visitBox"
            Android:orientation="vertical" >

            <TextView
                Android:id="@+id/txvrequestTitle"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                Android:singleLine="true"
                Android:text="Abcdefghighiklmnon"
                Android:textAppearance="?android:attr/textAppearanceLarge"
                Android:textColor="@color/orange_color" />


        </LinearLayout>
0
KeTaN