Frage

Ich habe eine Listview mit benutzerdefinierten Objekten durch das xml-Layout unten definiert. Ich möchte die Textview mit der ID „info“ auf einer einzigen Zeile zu ellipsized, und ich habe versucht, die Attribute mit

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

ohne Erfolg.

Wenn ich die layout_width auf eine feste Breite wie z.

android:layout_width="100px"

Der Text wird abgeschnitten, in Ordnung. Aber für diese Portabilität Gründen ist keine akzeptable Lösung.

Können Sie das Problem erkennen?

<?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> 

War es hilfreich?

Lösung

Ellipsize ist gebrochen (go Abstimmung über den Bug-Report , zumal sie behaupten, es ist nicht reproduzierbar), so haben Sie eine kleine Kerbe zu verwenden. Verwendung:

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

auf alles, was Sie ellipsize wollen. Auch nicht singleLine verwenden, es ist veraltet.

UPDATE:

Bei näherer Betrachtung das Problem, das Sie haben sind, ist, dass Ihre Tabelle auf der rechten Seite des Bildschirms erstreckt ausgeschaltet ist. Ändern Sie Ihre TableLayout Definition:

<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">

sollte dieses Problem beheben, dann tun, was ich sagte über den TextView ellipsize.

Andere Tipps

Ohne veraltete Eigenschaften zu verwenden, die folgenden Zeilen arbeiten gut für mich

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

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

Ich hatte die gleichen Ergebnisse wie Steve:

Android: ellipsize = "Marquee" Android: scrollHorizontally = "true" Android: lines = "1"

funktioniert perfekt

versuchen ...

d.

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

als Marquee funktioniert nur, wenn Ansicht ausgewählt ist oder fokussiert nach dem Kommentar # 2 auf http://code.google.com/p/android/issues/detail?id=5364

Nach dem Auschecken dieser 3 Ausgaben (geschlossen und wieder geöffnet) und früheren Posts, ich glaube, der Schlüssel Textview mit einem äußeren Linearlayout einpacken ist (oder ein anderes Layout Sie verwenden), und stellen Sie den „ layout_width “des äußeren Layouts Breite ein wenig kLEINE als die Textlänge im Textview enthalten ist. Es scheint, muss LIMIT die Breite der machen "android: ellipsize". Verhalten sich richtig

, um die Spitze in dieser Ausgabe Folgen, nachdem Sie all diese Attribute für Hacker, habe ich zum Beispiel auch die layout_width von äußeren Linearlayout 240dp:

<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>

Als ich erfolgreich das Ende der Textview-Anzeigen machen „...“, nicht sehr akzeptabel, aber es funktioniert! Und ich denke, es ist, ob in regelmäßigen Textview oder einen Textview in einer Liste Adapter verwendet funktioniert.

Hier ist mein Screenshot für das Ergebnis!

hoffe, es hilft ^^

Ref dieser drei Probleme:

Ausgabe 882

Ausgabe 10554

Ausgabe 31229

Ich fand irgendwo diese Attribute

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

es funktioniert für mich (Android 1.5)

Für mich dieses Attribut gearbeitet. Getestet habe ich auf API 8 und ab

In XML

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

Programmatically

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

Wenn Sie Textview in einem benutzerdefinierten setzen Viewgroup Sie erstellt haben, stellen Sie sicher, es erneut zu messen, ob Sie die Dimension nach der Messung geändert.

z. B. habe ich die neue Dimension in onLayout- berechnet. Bevor Sie child.layout rufen, rufen Sie

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

Ich hatte das gleiche Problem in Recycler View-Karte. Ich habe beschlossen, dies durch folgenden Code hinzu:

    <TextView
        android:ellipsize="end"
        android:maxLines="1"/>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top