web-dev-qa-db-fra.com

Terminez TextView avec 3 points en utilisant maxLength

J'ai un TextView dans ma mise en page qui est wrap_content dans layout_width. Il est limité à 15 caractères au maximum, donc j'utilise maxLength.

Je dois terminer cette TextView avec 3 points (...) et cela ne se produit que lorsque je donne à layout_width une taille fixe avec dp, ce que je ne veux pas faire.

Je sais qu'il est possible de coder et de couper la chaîne après le 15ème caractère, puis d'ajouter les 3 points, mais je préfère le faire en XML.

Une idée de comment terminer le texte avec 3 points et le laisser wrap_content?

<TextView
        Android:id="@+id/inbox_contactName"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:lines="1"
        Android:maxLines="1"
        Android:ellipsize="end"
        Android:singleLine="true"
        Android:maxLength="15"
        Android:textColor="#0670b4"
        Android:textSize="16sp" />
45
Yaniv

Ceci résoudra votre problème, utilisez la propriété ellipsize dans votre code XML

Android:ellipsize="end" <!-- This makes the magic ... thing -->
Android:maxEms="15" <!-- Limit of the Text -->
Android:singleLine="true" <!-- In case if you want everything in one line -->

Edit: singleLine est obsolète . Utilisez maxlines="1" à la place.

61
Kirk

Je suppose (d'après un commentaire) que @Yaniv l'a déjà résolu avec du code - mais c'est la bonne façon de le faire (avec XML). Peut aider les autres utilisateurs qui atterrissent ici. Astuce consiste à utiliser à la fois toleftof et / torightof.

<RelativeLayout>
...
 <TextView
        Android:layout_width="fill_parent"
        Android:layout_height="fill_parent"
        Android:singleLine="true"
        Android:layout_toRightOf="@id/some_element1"
        Android:layout_toLeftOf="@id/some_element2"/>
...
<RelativeLayout>
17
Ravi

Vous ne pouvez pas utiliser à la fois maxLength et Ellipsize bien que vous puissiez définir Maximum EMS voir l'exemple ci-dessous 

<TextView
        Android:id="@+id/tv_hist_source_lang"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:ellipsize="end"
        Android:maxEms="8"
        Android:maxLines="1"
        Android:text="TextView"
        Android:textAppearance="?android:attr/textAppearanceMedium" />

It looks like this

11
AZ_

Vous pouvez utiliser 

Android:maxWidth="100dp"
Android:maxLines="1"
Android:ellipsize="end"

Seulement ça marche pour moi.

5
Zhou Hongbo

utiliser ce Android:ellipsize="end"

5
Mahmoud Hashim

L’un des moyens les plus simples consiste à ajouter Right Padding + Ellipsize

<TextView
            Android:id="@+id/txtvw_contentcell_subhead"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:text="Polem sampler, Lorem Ipsum golep tolem burop yemit noski"
            Android:ellipsize="end"
            Android:maxLines="1"
            Android:textColor="@color/caption_black_color"
            Android:textSize="@dimen/caption_size"
            Android:paddingRight="40dp"/>

Voici un exemple de texte de sous-titre avec limite de caractères .  enter image description here

4
Enzokie

Très important: ellipsize = "end" ne fonctionne que lorsque maxLength est défini sur une valeur qui est supérieure à le nombre de caractères sur une ligne . Vous pouvez utiliser wrap_content si vous alignez la fin de TextView et commencez à tout Autres vues).

0
Benjamin Livinus

Vous pouvez simplement modifier la String lorsque sa longueur est supérieure à 20 pour ajouter l'ellipsize. 

0
Horatio

J'avais besoin de faire cela avec Radio Button et je voulais limiter la taille à une ligne. Lorsque j'ai utilisé Android:singleline="true", le cercle de vérification du bouton radio a disparu. Voici le code qui a finalement fonctionné:

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

Il n'y a pas besoin de définir ems. Cela fonctionnera probablement aussi dans TextView et d'autres composants de l'interface utilisateur. J'espère que cela aide quelqu'un.

0
Micer