93 votes

Comment puis-je savoir si ma fenêtre de texte a été elliptisée ?

Je dispose d'une ligne TextView qui a android:ellipsize="end" set. J'aimerais cependant savoir si la chaîne de caractères que j'y place est effectivement trop longue (afin de m'assurer que la chaîne complète est affichée ailleurs sur la page).

Je pourrais utiliser TextView.length() et trouver la longueur approximative de la ficelle qui rentrera, mais comme il s'agit de plusieurs lignes, la TextView gère le moment de l'emballage, donc cela ne fonctionnera pas toujours.

Des idées ?

1voto

coffee Points 41

Cela fonctionne pour moi

if (l != null) {
    int lines = l.getLineCount();
     if (lines > 0) {
     for (int i = 0; i < lines; i++) {
     if (l.getEllipsisCount(i) > 0) {
      ellipsize = true;
      break;
     }
    }
   }
  }

1voto

Duke Caesar Points 16

Si votre aperçu de texte contient plusieurs paragraphes, l'utilisation de getEllipsisCount ne fonctionnera pas pour les lignes vides à l'intérieur. getEllipsisCount pour la dernière ligne de n'importe quel paragraphe retournera 0.

0voto

nicolas asinovich Points 500

Cela fonctionne vraiment, par exemple, pour transmettre des données complètes à la boîte de dialogue à partir d'un élément de RecyclerView :

holder.subInfo.post(new Runnable() {
                @Override
                public void run() {
                    Layout l = holder.subInfo.getLayout();
                    if (l != null) {
                        final int count = l.getLineCount();
                        if (count >= 3) {
                            holder.subInfo.setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View view) {
                                    final int c = holder.subInfo.getLineCount();
                                    if (c >= 3) {
                                        onClickToShowInfoDialog.showDialog(holder.title.getText().toString(), holder.subInfo.getText().toString());
                                    }
                                }
                            });
                        }
                    }
                }
            });

0voto

Victor Points 197

En combinant l'avertissement de @Thorstenvv avec la correction de @Tiano, voici la version Kotlin :

val layout = textView.layout ?: return@doOnLayout
val lines = layout.lineCount
val hasLine = lines > 0
val hasEllipsis = ((lines - 1) downTo 0).any { layout.getEllipsisCount(it) > 0 }
if (hasLine && hasEllipsis) {
    // Text is ellipsized
}

0voto

hetsgandhi Points 123

Sur Kotlin vous pouvez utiliser le code ci-dessous.

var str= "Kotlin is one of the best languages."
textView.text=str
textView.post {
val isEllipsize: Boolean = !textView.layout.text.toString().equals(str)

if (isEllipsize) {
     holder.itemView.tv_viewMore.visibility = View.VISIBLE
} else {
     holder.itemView.tv_viewMore.visibility = View.GONE
}    
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X