android textview multiline ellipsis

android - Ellipsize no funciona correctamente para un TextView multilínea con una altura máxima arbitraria



multiline ellipsis (1)

Calcule cuántas líneas caben en TextView con TextView#getHeight() y TextView#getLineHeight() . Luego llame a TextView#setMaxLines() .

ViewTreeObserver observer = textView.getViewTreeObserver(); observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { int maxLines = (int) textView.getHeight() / textView.getLineHeight(); textView.setMaxLines(maxLines); textView.getViewTreeObserver().removeGlobalOnLayoutListener( this); } });

Tengo un TextView con una altura máxima desconocida, que depende de la resolución de pantalla / DPI del dispositivo. Así, por ejemplo, en un dispositivo MDPI, esta altura máxima hace posible mostrar solo 2 líneas a la vez, un valor que se puede aumentar hasta un número no definido.

Mi problema está relacionado con la funcionalidad de elipsis. Supongamos que un determinado dispositivo permite visualizar 4 líneas. Si configuro manualmente el número máximo de líneas, así ...

<TextView android:id="@+id/some_id" android:layout_width="fill_parent" android:layout_height="0dip" android:ellipsize="end" android:maxLines="4" android:singleLine="false" android:layout_weight="1" android:gravity="center_vertical" android:text="This is some really really really really really long text" android:textSize="15sp" />

... todo funciona bien. Si el texto no encaja correctamente, entonces los puntos suspensivos se agregan al final de la cuarta línea, como esto:

This is some really really really really really long...

Pero prefiero no establecer el número de líneas como una variable estática, ya que preferiría incluir soporte para cualquier combinación de resolución DPI / pantalla. Entonces, si maxLines los puntos suspensivos ya no se muestran correctamente en la línea cuatro, mostrando en cambio una parte incompleta del texto:

This is some really really really really really long

Si incremento ligeramente el tamaño de TextView , puedo ver que el resto del texto aún se está dibujando "detrás" de las otras Views . Configurar la variable maxHeight tampoco parece funcionar.

Realmente no puedo encontrar una solución para este problema. ¿Algunas ideas? Si ayuda, estoy trabajando solo con Android v4.0.3 y superior (nivel de API 15).