web-dev-qa-db-fra.com

Définir Ellipsize sur TextView réduit le nombre de lignes indiquées par un (au lieu de n'illipser que le dernier)

quand j'utilise TextView avec singleLine="true" et ellipsize="end" (mon top TextView), cela fonctionne bien

mais dans un autre TextView ayant plus de 1 lignes (dans mon cas, 3 lignes dans mon TextView), lines="3" and maxLines="3" and ellipsize="end", ne fonctionne pas correctement.

Quand je ne mets pas ellipsize="end" dans tvDesc, il affiche 3 lignes, ce qui est OK . Voici le code: XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent" >

    <ImageView
        Android:id="@+id/imgv"
        Android:layout_width="65dp"
        Android:layout_height="80dp"
        Android:layout_alignParentLeft="true"
        Android:layout_alignParentTop="true"
        Android:src="@drawable/img1"
        Android:scaleType="fitXY" />

    <TextView
        Android:id="@+id/tvTitle"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentTop="true"
        Android:layout_toRightOf="@+id/imgv"
        Android:background="@Android:color/white"
        Android:textColor="@Android:color/black"
        Android:text="Title testing line number and ellipsize at end"
        Android:maxLines="1"
        Android:singleLine="true"
        Android:ellipsize="end"    <---  WORKS WELL
        Android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        Android:id="@+id/tvDesc"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_below="@+id/tvTitle"
        Android:layout_toRightOf="@+id/imgv"
        Android:layout_alignBottom="@+id/imgv"
        Android:layout_alignParentRight="true"
        Android:textSize="14dp"
        Android:lines="3"
        Android:maxLines="3"
                       <----------  WITHOUT ellipsize

        Android:text="I wanna this textview of having 3 lines and ellipsize at END and at this time I am Testing for it. This TextView shows 3 lines WITHOUT ellipsize property, but shows only 2 Lines when ELLIPSIZE property is setted"
        Android:textAppearance="?android:attr/textAppearanceMedium" />

</RelativeLayout>

Le code ci-dessus montre TextView tvDesc avec 3 lignes et aucune ellipsize. Voici une image:

enter image description here

Mais, je veux ellipsize, j'utilise donc le code suivant : XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent" >

    <ImageView
        Android:id="@+id/imgv"
        Android:layout_width="65dp"
        Android:layout_height="80dp"
        Android:layout_alignParentLeft="true"
        Android:layout_alignParentTop="true"
        Android:src="@drawable/img1"
        Android:scaleType="fitXY" />

    <TextView
        Android:id="@+id/tvTitle"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentTop="true"
        Android:layout_toRightOf="@+id/imgv"
        Android:background="@Android:color/white"
        Android:textColor="@Android:color/black"
        Android:text="Title testing line number and ellipsize at end"
        Android:maxLines="1"
        Android:singleLine="true"
        Android:ellipsize="end"
        Android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        Android:id="@+id/tvDesc"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_below="@+id/tvTitle"
        Android:layout_toRightOf="@+id/imgv"
        Android:layout_alignBottom="@+id/imgv"
        Android:layout_alignParentRight="true"
        Android:textSize="14dp"
        Android:lines="3"
        Android:maxLines="3"
        Android:ellipsize="end"    <------  WITH  ELLIPSIZE

        Android:text="I wanna this textview of having 3 lines and ellipsize at END and at this time I am Testing for it. This TextView shows 3 lines WITHOUT ellipsize property, but shows only 2 Lines when ELLIPSIZE property is setted"
        Android:textAppearance="?android:attr/textAppearanceMedium" />

</RelativeLayout>

Qui montre TextView tvDesc avec seulement 2 lignes et Ellipsize ,

qui n’est pas correctement dézirée, comme suit: enter image description here

Je veux 3 lignes dans TextView tvDesc avec ellipsize

QUELQU'UN PEUT-IL M'AIDER.?

40
Chintan Raghwani

C’est de loin la solution la plus simple que j’ai trouvée et que j’utilise actuellement dans le déploiement. Faites-moi savoir si vous avez besoin d'une autre assistance!

Oh, et n'oubliez pas de supprimer la balise Android:ellipsize dans votre XML car vous utiliserez le code du bas pour ellipser automatiquement à la fin des 3 lignes.

TextView snippet;
snippet.setText("loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor ")
ViewTreeObserver vto = this.snippet.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

    @Override
    public void onGlobalLayout() {
        ViewTreeObserver obs = snippet.getViewTreeObserver();
        obs.removeGlobalOnLayoutListener(this);
        if (snippet.getLineCount() > 3) {
            int lineEndIndex = snippet.getLayout().getLineEnd(2);
            String text = snippet.getText().subSequence(0, lineEndIndex - 3) + "...";
            snippet.setText(text);
        }
    }
});
45
Vishwa Patel

Il suffit de définir Android:maxLines et Android:ellipsize.

<TextView
        Android:id="@+id/tv_dua"
        Android:ellipsize="end"
        Android:maxLines="3"
        Android:text="long text"
        Android:textAppearance="?android:attr/textAppearanceMedium" />
16
irscomp

Utilisez ce qui suit pour obtenir une vue texte multiligne avec Ellipsis sur la dernière ligne:

Android:maxLines="4"
Android:ellipsize="end"
Android:singleLine="false"

Remplacez 4 par le nombre de lignes que vous souhaitez . J'espère que cela aidera!

2
Shivam Bhalla

Je l'ai essayé avec maxLines et Ellipsize sur Android 7 et 8.

Android:maxLines="3"
Android:ellipsize="end"

L'aperçu montre 2 lignes et sur la troisième ligne "...".

Mais cela semble être un bug dans l'aperçu.

Sur l'appareil, cela fonctionne parfaitement, 3 lignes de texte, à la fin de la troisième ligne "..."

0
McOzD