Vérifier si textview est ellipsized dans android
J'ai TextView
avec une largeur de wrap content
. Dans ce TextView
j'ai mis du texte, mais le texte n'est pas de la même longueur à chaque fois. Lorsque le texte est très long je utiliser une seule ligne de vrai et ellipsize
: fin. Mais maintenant j'ai un problème. Je tiens à mettre en Visibilité des autres mise en page, mais cela dépend de la longueur de mon texte. Si le texte est trop long pour tenir dans l'écran, je veux setVisible vrai, mais quand le texte est court et quand je n'ai pas besoin ellipsize, je veux définir la visibilité de faux. J'ai donc besoin de vérifier l'état de mon TextView. Lors de son ellipsize je veux setVisible
vrai, quand ce n'est pas setVisible
faux. Comment je peux le faire.
C'est ce que j'ai:
tvAle.post(new Runnable() {
@Override
public void run() {
int lineCount = tvAle.getLineCount();
Paint paint = new Paint();
paint.setTextSize(tvAle.getTextSize());
final float size = paint.measureText(tvAle.getText().toString());
Log.v("a", ""+size+" "+tvAle.getWidth());
if ((int)size > (tvAle.getWidth()+10)) {
allergiesLayout.setVisibility(View.VISIBLE);
}
else
allergiesLayout.setVisibility(View.GONE);
}
mais cette solution ne fonctionne pas.
Double Possible de Comment puis-je savoir si mon textview été ellipsized?
OriginalL'auteur user1302569 | 2013-03-22
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser cette méthode a fourni: getEllipsisCount
où la ligne pourrait être obtenu par l'intermédiaire d'getLineCount()
le
getEllipsisCount()
méthode a un int en paramètre . mise à jour de votre réponse 😉Mis à jour. 🙂
j'ai édité votre réponse avec la mise en œuvre correcte de ellipsize test 😉
Il ne fonctionne pas lorsque le texte contient "\n"
OriginalL'auteur Calvin
Bien, la solution retenue ne fonctionne pas mais manque un peu de cas du coin car il ne fera que vérifier la dernière ligne pour ellipsized caractères. Si nous avons un TextView composé de deux lignes et l'utilisation TruncateAt.DÉMARRER à tronquer le texte au début, à la accepté de répondre à échouera. :-/
L'ajout d'un ViewTreeObserver.OnPreDrawListener semble plus vraiment comme un frais coûteux pour moi. J'ai donc fait les améliorations suivantes au code de la accepté de répondre:
Il y a encore de la place pour l'amélioration, si. Mais cette méthode ne suffit mon cas d'utilisation. Des Corrections et des améliorations sont les bienvenues. 🙂
OriginalL'auteur Sam del Rö
À l'aide de getEllipsisCount l'habitude de travailler avec du texte qui a des lignes vides. J'ai utilisé le code suivant pour le faire fonctionner :
Assurez-vous de ne pas établir un maxLineCount dans votre XML. Ensuite, vous pouvez vérifier pour la lineCount dans votre code et si elle est supérieure à un certain nombre, vous pouvez retourner false pour annuler le dessin de la TextView et définissez le nombre de lignes ainsi que d'un drapeau à enregistrer si le textView est trop long ou pas. Le textview attirera à nouveau avec le bon nombre de lignes et vous saurez si sa ellipsized ou pas avec le drapeau.
Vous pouvez ensuite utiliser la isEllipsized drapeau de faire tout ce dont vous avez besoin.
m.isEllipsized
est juste un indicateur de la classe qui contient le bloc de code dans l'exempleOriginalL'auteur js123