Android: TextView tronque et remplace automatiquement les 3 derniers caractères de la chaîne

131

Si a Stringest plus long que la TextViewlargeur de, il s'enroule automatiquement sur la ligne suivante. Je peux éviter cela en utilisant android:singleLine(obsolète) ou en définissant android:inputType="text". Ce dont j'ai besoin maintenant, c'est de quelque chose qui remplace les 3 derniers caractères de mon Stringpar " ... ". Comme je n'utilise pas de police monospace, cela sera toujours différent en fonction des lettres utilisées dans mon String. Je me demande donc quelle est la meilleure façon d'obtenir les 3 derniers caractères d'une chaîne dans a TextViewet de les remplacer. Peut-être qu'il y a déjà quelque chose d'implémenté dans le framework Android, car cela doit être un problème courant.

znq
la source

Réponses:

290

Vous devriez pouvoir utiliser la propriété "ellipsize" d'une vue de texte:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/text_mytext"
    android:ellipsize="end"
    android:maxLines="1"
/>

Vous devrez peut-être également appliquer des valeurs de gravité à la mise en page; J'ai parfois vu des vues "auto-étirées" sans elles.

Nate
la source
Parfait. Merci. J'ai déjà essayé cela, mais je n'ai pas fonctionné, car j'ai utilisé android: inputType = "text" au lieu de android: singleLine = "true" (qui est censé être obsolète). Mais maintenant, je vais m'en tenir à android: singleLine = "true". Merci beaucoup.
znq
44
Il n'ajoute toujours pas le "...". Pour moi, cette question n'est pas entièrement répondue! Cette réponse fera de "short verylongword" juste "short" et non "short verylon ..." En plus de cela, vous suggérez d'utiliser un attribut obsolète.
OneWorld
7
Fonctionne très bien, mais singleLine est obsolète, vous devez donc utiliser maxLines = "1" à la place. Remarque: ellipsize fonctionne également avec plusieurs lignes!
Torre Lasley
4
singleLine est obsolète. Utilisez maxLines = "1". juste un commentaire à l'ancienne réponse
Ewoks
1
MaxLine = 1 tronquera la vue de texte au milieu. SingleLine = True fonctionne comme prévu.
Snake
33

J'ai trouvé une solution intéressante pour ce problème.

maxLines=1
ellipsize=end
scrollHorizontally=true

L'astuce est cette dernière déclaration sur le défilement horizontal .... vérifiez-le. Cela fonctionne au moins sur la v2.2.

BonanzaDriver
la source
Intéressant ... bon à savoir. Merci Marco pour le heads-up.
BonanzaDriver
4

Par programme, vous pouvez utiliser:

TextView tx = new TextView(this);
tx.setTextSize(13);
tx.setGravity(Gravity.CENTER);
tx.setTop(90);
tx.setText("Long text here");
tx.setTextColor(Color.BLACK);
tx.setSingleLine(true);
tx.setEllipsize(TruncateAt.END);
xevser
la source