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 ?

0voto

Gershon Tusson Points 1

Il s'agit d'une bibliothèque simple permettant de créer une vue de texte extensible. Comme Continue ou moins. Cette bibliothèque est une version étendue de TextView. Facile à utiliser.

implementation 'com.github.mahimrocky:ShowMoreText:1.0.2'

Comme ceci, 1 https://raw.githubusercontent.com/mahimrocky/ShowMoreText/master/screenshot1.png

2 https://raw.githubusercontent.com/mahimrocky/ShowMoreText/master/screenshot2.png

 <com.skyhope.showmoretextview.ShowMoreTextView
    android:id="@+id/text_view_show_more"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/text"
    />

Dans Activity vous pouvez utiliser comme :

ShowMoreTextView textView = findViewById(R.id.text_view_show_more);

//You have to use following one of method    

// For using character length
textView.setShowingChar(numberOfCharacter);
//number of line you want to short
textView.setShowingLine(numberOfLine);

-1voto

js123 Points 94

Utilisation de getEllipsisCount ne fonctionnera pas avec un texte contenant des lignes vides. J'ai utilisé le code suivant pour le faire fonctionner :

message.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
        @Override
        public boolean onPreDraw() {

            if(m.isEllipsized == -1) {
                Layout l = message.getLayout();
                if (message.getLineCount() > 5) {
                    m.isEllipsized = 1;
                    message.setMaxLines(5);
                    return false;
                } else {
                    m.isEllipsized = 0;
                }
            }
            return true;
        }
    });

Veillez à ne pas définir un maxLineCount dans votre XML. Vous pouvez alors vérifier si le lineCount dans votre code et s'il est supérieur à un certain nombre, vous pouvez renvoyer false pour annuler le dessin de l'image. TextView et définir le nombre de lignes ainsi qu'un drapeau pour enregistrer si la vue du texte est trop longue ou non. La vue du texte se redessinera avec le nombre correct de lignes et vous saurez si elle est elliptique ou non grâce au drapeau.

Vous pouvez alors utiliser le isEllipsized drapeau pour faire tout ce que vous voulez.

-1voto

user3636561 Points 1

Créer une méthode dans votre TextViewUtils classe

public static boolean isEllipsized(String newValue, String oldValue) {
    return !((newValue).equals(oldValue));
}

appeler cette méthode lorsqu'elle est nécessaire, par exemple :

        if (TextViewUtils.isEllipsized(textviewDescription.getLayout().getText().toString(), yourModelObject.getDescription()))
            holder.viewMore.setVisibility(View.VISIBLE);//show view more option
        else
            holder.viewMore.setVisibility(View.GONE);//hide 

mais textView.getLayout() ne peut pas être appelé avant que la vue(layout) soit définie.

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