Domanda

Ho un listView con oggetti personalizzati definiti dal layout xml di seguito. Voglio il textView con ID " info " per essere ellissizzato su una sola riga e ho provato a usare gli attributi

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

senza successo.

Se imposto layout_width su una larghezza fissa come ad esempio

android:layout_width="100px"

il testo viene troncato bene. Ma per motivi di portabilità questa non è una soluzione accettabile.

Riesci a individuare il problema?

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

È stato utile?

Soluzione

L'ellipsize è interrotta (vai vota sulla segnalazione di bug , soprattutto perché sostengono che non è riproducibile), quindi è necessario utilizzare un hack minore. Usa:

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

su tutto ciò che vuoi ellissize. Inoltre, non utilizzare singleLine , è stato deprecato.

UPDATE:

A un esame più attento, il problema che stai riscontrando è che il tuo tavolo si sta estendendo dal lato destro dello schermo. Modifica della definizione TableLayout in:

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

dovrebbe risolvere quel problema, quindi fai quello che ho detto sopra per ellissizzare il tuo TextView .

Altri suggerimenti

Senza usare proprietà deprecate, le seguenti righe funzionano perfettamente per me

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

ref http://code.google.com/p / android / emissioni / dettaglio? id = 882 # C9

Ho avuto gli stessi risultati di Steve:

android: ellipsize = " tendone " android: scrollHorizontally = " allineare " android: linee = " 1 "

funziona perfettamente

provare ...

cioè.

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

poiché il riquadro di selezione funziona solo quando la vista è selezionata o focalizzata in base al commento # 2 su http://code.google.com/p/android/issues/detail?id=5364

Dopo aver verificato questi 3 problemi (chiuso e riaperto) e i post precedenti, penso che la chiave sia avvolgere TextView con un LinearLayout esterno (o qualsiasi altro layout che stai utilizzando) e impostare il " < strong> layout_width " di larghezza del layout esterno leggermente PIÙ PICCOLO rispetto alla lunghezza del testo contenuta in TextView. Sembra che debba LIMITARE la larghezza per rendere " android: ellipsize " comportarsi correttamente.

Segui il suggerimento in questo problema , dopo aver aggiunto tutti questi attributi per l'hacking, ho anche impostato layout_width di LinearLayout esterno su 240dp, ad esempio:

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

Di quanto riesca a fare con successo la fine di TextView che visualizza " ... " ;, non molto accettabile ma funziona! E penso che funzioni se utilizzato in TextView normale o TextView in un adattatore di elenco.

Ecco il mio screenshot per il risultato!

spero che aiuti ^^

Rif di questi 3 numeri:

numero 882

numero 10554

numero 31229

Ho trovato da qualche parte questi attributi

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

funziona bene per me (Android 1.5)

Per me questi attributi hanno funzionato. Ho testato su API 8 e successive

In XML

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

a livello di codice

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

Se inserisci TextView in un ViewGroup personalizzato che hai creato, assicurati di misurarlo di nuovo se hai cambiato la dimensione dopo la misurazione.

Ad esempio, ho calcolato la nuova dimensione in onLayout. Prima di chiamare child.layout, chiama

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

Ho avuto lo stesso problema nella scheda di visualizzazione del riciclatore. Ho risolto questo aggiungendo il seguente codice:

    <TextView
        android:ellipsize="end"
        android:maxLines="1"/>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top