27 votes

Ellipsize ne fonctionne pas pour textView dans la liste personnaliséeView

J'ai une listView avec des objets personnalisés définis par la disposition xml ci-dessous. Je veux que le textView avec l'ID "info" soit ellipsé sur une seule ligne, et j'ai essayé d'utiliser les attributs

 android:singleLine="true"
android:ellipsize="end"
 

sans succès.

Si je mets la layout_width à une largeur fixe comme par exemple

 android:layout_width="100px"
 

le texte est bien tronqué. Mais pour des raisons de portabilité, ce n'est pas une solution acceptable.

Pouvez-vous repérer le problème?

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingBottom="5px"
>
<TextView  
android:id="@+id/destination"
android:layout_width="fill_parent" 
android:layout_height="wrap_content"
android:textSize="22dp"
android:paddingLeft="5px"
/>

<TextView  
android:id="@+id/date"
android:layout_width="fill_parent" 
android:layout_height="wrap_content"
android:textSize="15dp"
android:paddingLeft="5px"
/>

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/info_table"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingLeft="5px"
android:paddingTop="10px" 
>
    <TableRow>
        <TextView
        	android:id="@+id/driver_label"
        	android:gravity="right"
        	android:paddingRight="5px"
        	android:text="@string/driver_label" />
        <TextView
        	android:id="@+id/driver" />
    </TableRow>
    <TableRow>
        <TextView
        	android:id="@+id/passenger_label"
        	android:gravity="right"
        	android:paddingRight="5px"
        	android:text="@string/passenger_label" />
        <TextView
        	android:id="@+id/passengers" />
    </TableRow>
    <TableRow>
        <TextView
        	android:id="@+id/info_label"
        	android:gravity="right"
        	android:paddingRight="5px" 
        	android:text="@string/info_label"/>
        <TextView
        	android:id="@+id/info"
        	android:layout_width="fill_parent"
        	android:singleLine="true"
        	android:ellipsize="end" />
    </TableRow>
</TableLayout>
 

37voto

tbruyelle Points 5323

Sans utiliser de propriétés obsolètes, les lignes suivantes fonctionnent très bien pour moi

 android:ellipsize="end" 
android:lines="1"
android:scrollHorizontally="true"
 

ref http://code.google.com/p/android/issues/detail?id=882#c9

23voto

fiXedd Points 21644

Ellipsize est cassé (aller voter sur le rapport de bug, surtout depuis qu'ils prétendent qu'il n'est pas reproductible), donc vous devez utiliser un mineur hack. Utilisation:

android:inputType="text"
android:maxLines="1"

sur tout ce que vous voulez ellipsize. Aussi, ne pas utiliser singleLine, il est dépréciée.

Mise à JOUR:

Sur une inspection plus minutieuse, le problème que vous rencontrez est que votre table est en l'étendant sur le côté droit de l'écran. La modification de votre TableLayout définition de:

<TableLayout
	android:id="@+id/info_table"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	android:paddingLeft="5px"
	android:paddingTop="10px"
	android:shrinkColumns="1">

devrait corriger le problème, puis faire ce que j'ai dit ci-dessus pour ellipsize votre TextView.

6voto

Andy Cochrane Points 311

J'ai eu les mêmes résultats que Steve:

android: ellipsize = "marquee" android: scrollHorizontally = "true" android: lines = "1"

marche parfaitement

4voto

hwii77 Points 86

essayer...

c'est à dire

 android:ellipsize="marquee"
android:focusable="true" android:marqueeRepeatLimit="num|marquee_forever"
android:lines="1" android:focusableInTouchMode="true"
android:scrollHorizontally="true"
 

comme chapiteau ne fonctionne que lorsque la vue est sélectionnée ou focalisée selon le commentaire # 2 sur http://code.google.com/p/android/issues/detail?id=5364

0voto

molokoloco Points 1626

J'ai trouvé quelque part cet attribut

 <TextView ...
android:singleLine="true"
android:ellipsize="marquee" />
 

ça marche bien pour moi (Android 1.5)

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