Pregunta

Tengo un listView con objetos personalizados definidos por el diseño xml a continuación. Quiero el textView con id " info " para ser elipsis en una sola línea, y he intentado usar los atributos

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

sin éxito.

Si configuro el layout_width en un ancho fijo como, por ejemplo,

android:layout_width="100px"

el texto está bien truncado. Pero por razones de portabilidad, esta no es una solución aceptable.

¿Puedes detectar el 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> 

¿Fue útil?

Solución

Ellipsize está roto (vaya vote sobre el informe de error , especialmente porque afirman que no es reproducible), por lo que debe usar un truco menor. Uso:

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

en cualquier cosa que quieras elipsar. Además, no use singleLine , ha quedado en desuso.

UPDATE:

En una inspección más cercana, el problema que tiene es que su mesa se extiende desde el lado derecho de la pantalla. Cambiar la definición de TableLayout a:

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

debería solucionar ese problema, luego haga lo que dije anteriormente para elipsis de su TextView .

Otros consejos

Sin usar propiedades en desuso, las siguientes líneas funcionan muy bien para mí

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

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

Tuve los mismos resultados que Steve:

android: ellipsize = " marquee " android: scrollHorizontally = " verdadero " android: líneas = " 1 "

funciona perfectamente

prueba ...

es decir

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

ya que la marquesina solo funciona cuando la vista está seleccionada o enfocada de acuerdo con el comentario # 2 en http://code.google.com/p/android/issues/detail?id=5364

Después de revisar estos 3 problemas (cerrado y reabierto) y publicaciones anteriores, creo que la clave es concluir TextView con un LinearLayout externo (o cualquier otro diseño que esté usando) y establecer el " < strong> layout_width " de ancho de diseño externo un poco MÁS PEQUEÑO que la longitud del texto contenido en TextView. Parece que tiene que LIMITAR el ancho para hacer que " android: ellipsize " comportarse correctamente.

Siga la sugerencia en este problema , después de agregar todos estos atributos para hackear, también configuré el layout_width de LinearLayout externo a 240dp, por ejemplo:

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

¡Entonces puedo hacer que el final de TextView muestre " ... " ;, no es muy aceptable pero funciona! Y creo que funciona si se usa en TextView normal o TextView en un Adaptador de lista.

¡Aquí está mi captura de pantalla para el resultado!

espero que ayude ^^

Ref. de esos 3 problemas:

número 882

problema 10554

problema 31229

Encontré en alguna parte estos atributos

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

funciona bien para mí (Android 1.5)

Para mí, este atributo funcionó. Probé en API 8 y en adelante

En XML

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

Programáticamente

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

Si coloca TextView dentro de un ViewGroup personalizado que creó, asegúrese de medirlo nuevamente si cambió la dimensión después de la medición.

Por ejemplo, calculé la nueva dimensión en onLayout. Antes de llamar a child.layout, llame al

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

Tuve el mismo problema en la tarjeta de vista del reciclador. He resuelto esto agregando el siguiente código:

    <TextView
        android:ellipsize="end"
        android:maxLines="1"/>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top