Question

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

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

sans succès.

Si je règle Lay_width sur une largeur fixe, comme par exemple

android:layout_width="100px"

le texte est tronqué bien. Mais pour des raisons de portabilité, cette solution n'est pas 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> 

Était-ce utile?

La solution

Ellipsize est cassé ( voter sur le rapport de bogue . , d’autant plus qu’ils prétendent que ce n’est pas reproductible), vous devez donc utiliser un hack mineur. Utilisez:

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

sur tout ce que vous voulez ellipsize. De même, n'utilisez pas singleLine , il est obsolète.

UPDATE:

En regardant de plus près, le problème que vous rencontrez est que votre table s’étend du côté droit de l’écran. Modification de votre définition TableLayout en:

<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 résoudre ce problème, puis faites ce que j'ai dit ci-dessus pour ellipsiser votre TextView .

Autres conseils

Sans utiliser les 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

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

android: ellipsize = " chapiteau " android: scrollHorizontally = " true " android: lignes = "1"

fonctionne parfaitement

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 texte de sélection ne fonctionne que lorsque la vue est sélectionnée ou centrée selon le commentaire n ° 2 de http://code.google.com/p/android/issues/detail?id=5364

Après avoir vérifié ces 3 problèmes (fermé et réouvert) et les posts précédents, je pense que la clé est de terminer TextView avec un LinearLayout externe (ou toute autre mise en page que vous utilisez), et de définir le paramètre " < strong> largeur de la mise en page " de largeur de mise en page externe un peu PLUS PETIT que la longueur du texte contenu dans TextView. Il semble que LIMIT doit limiter la largeur pour créer le fichier "androïde: ellipsize". se comporter correctement.

Suivez le conseil dans ce problème , Après avoir ajouté tous ces attributs pour le piratage, j'ai également défini la largeur de layout_width de LinearLayout externe à 240dp, par exemple:

<Linearlayout
  android:layout_width="240dp"
  android:layout_height="wrap_content"
  ...>

    <TextView
     ....
     android:singleLine="true"
     android:lines="1"
     android:maxLines="1"
     android:scrollHorizontally="true"
     android:ellipsize="end"
     android:text="this is a text which length should be longer than 240dp"
    />
</LinearLayout>

Alors je peux faire en sorte que la fin de TextView affiche "...", pas très acceptable, mais ça fonctionne! Et je pense que cela fonctionne qu'il soit utilisé dans TextView normal ou dans un adaptateur de liste.

Voici ma capture d'écran du résultat!

esp&eacute;rons que cela vous aidera ^^

Référence de ces 3 numéros:

numéro 882

numéro 10554

numéro 31229

J'ai trouvé quelque part cet attribut

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

ça marche très bien pour moi (Android 1.5)

Pour moi, ces attributs ont fonctionné. J'ai testé sur API 8 et les versions suivantes

En XML

<TextView
 ....
 android:maxLines="1"
 android:scrollHorizontally="true"
 android:ellipsize="end"
 ....
/>

par programme

setMaxLines(1);
setEllipsize(TruncateAt.END);
setHorizontallyScrolling(true);

Si vous placez TextView dans un groupe de vues personnalisé que vous avez créé, assurez-vous de le mesurer à nouveau si vous avez modifié la dimension après la mesure.

Par exemple, j'ai calculé la nouvelle dimension dans onLayout. Avant d'appeler child.layout, appelez

measureChild(child,
    View.MeasureSpec.makeMeasureSpec(childWidth, View.MeasureSpec.EXACTLY),
    View.MeasureSpec.makeMeasureSpec(childHeight, View.MeasureSpec.EXACTLY));

J'ai eu le même problème dans la vue en recycleur. J'ai résolu ce problème en ajoutant le code suivant:

    <TextView
        android:ellipsize="end"
        android:maxLines="1"/>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top