web-dev-qa-db-fra.com

Android: Quelque chose de mieux qu'Android: ellipsize = "end" pour ajouter "..." aux longues chaînes tronquées?

Cette propriété fait

"mot court et très long"

à

"court et"

. Mais je veux avoir un smth. comme

"court et très solitaire ..."

En ce moment, je tronque la chaîne en Java. Cependant, c'est basé sur le nombre de caractères et non sur la longueur réelle du lien. Donc, le résultat n'est pas très agréable.

String title;
    if(model.getOrganization().length() > 19) {
      title = model.getText().substring(0, 15).trim() + "…";
    } else {
      title = model.getText();
    }
    ((TextView) findViewById(R.id.TextViewTitle)).setText(title);

Mise à jour

Je viens de remarquer que cette propriété ajoute en fait "..." dans quelques cas. Mais pas dans tous:

12345678901234567890 devient "12345678901234 ..."

Cependant,

"1234567890 1234567890" devient "1234567890" et non "1234567890 123 ..."

Mise à jour 2

Maintenant ça devient vraiment génial! Je viens de définir singleLine = true et supprimé maxLine (le bogue apparaît avec et sans définir l'attribut ellipsize) ...

alt text

Il s'agit d'une capture d'écran de Motorola Milestone avec Android 2.1 mise à jour 1. La même chose se produit sur HTC Desire avec la même Android version

Mise à jour 3

Maintenant, j'utilise Android: ellipsize = "Marquee". Cela semble être le seul cadre qui fonctionne correctement. Il ne bouge également que lorsqu'il est concentré. Je le vois également dans de nombreuses autres applications. Je suppose que sa pratique courante.

43
OneWorld

Voir ma mise à jour 3. La solution de contournement utilisait "Marquee". J'ai vu de nombreuses applications faire cela en ce moment. Maintenant, avec les nouvelles versions de Android cette fonctionnalité est très probablement corrigée et fonctionnera comme prévu. (Je suppose)

1
OneWorld

Si c'est pour une seule ligne, essayez ceci:

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

Ça a marché pour moi.

66
bakkay

J'ai eu un problème similaire et la définition de cette propriété sur TextView a aidé:

Android:singleLine="true"

En outre, j'utilisais un RelativeLayout, j'ai donc limité l'espace que le TextView pouvait prendre en définissant une marge gauche sur un bouton à droite du TextView, de sorte que le texte ne puisse pas se développer davantage et soit obligé de tronquer son contenu.

Ce n'est peut-être pas la solution à votre problème, mais cela m'a aidé dans une situation similaire.

24
Maragues

Peut-être pourriez-vous voir comment fonctionne la classe Ellipsizer privée utilisée par le système d'exploitation et la modifier pour votre application?

Modifier: voici un lien de travail - http://androidxref.com/5.1.0_r1/xref/frameworks/base/core/Java/Android/text/Layout.Java#18

1
Josh