2011-04-26 10 views
10

he definido la siguiente TextView:Android ¿Cómo deshacerse del signo de interrogación al final de ellipsize

<TextView 
    android:id="@+id/textview_id" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="left" 
    android:layout_alignParentTop="true" 
    android:layout_marginRight="25dip" 
    android:ellipsize="end"/> 

y como se esperaba el texto se corta si es demasiado larga y se sustituye por "..." . Pero al final de los tres puntos aparece un signo de interrogación rodeado por un cuadrado.

¿Cómo puedo deshacerme de este signo de interrogación?

Gracias!

+0

¿Qué texto está colocando en TextView? Suena como un error de codificación – blindstuff

Respuesta

35

Para citar a mí mismo de one of my books: Clase

de Android TextView tiene la capacidad incorporada al texto "ellipsize", truncándolo y la adición de una elipsis si el texto es más largo que el espacio disponible . Puede usar esto a través del atributo android:ellipsize, por ejemplo. Esto funciona bastante bien, al menos para texto de una sola línea.

Los puntos suspensivos que utiliza Android no son tres períodos. Más bien usa un personaje real de elipse , donde los tres puntos están contenidos en un solo glifo. Por lo tanto, cualquier fuente que utilice y que también utilice la función de "elipsis" tendrá y necesitará el glifo de puntos suspensivos.

Más allá de eso, Android rellena la cadena que se representa en la pantalla , de modo que la longitud (en caracteres) es la misma antes y después de "ellipsizing". Para que esto funcione, Android reemplaza un carácter con ellipsis , y reemplaza todos los demás caracteres eliminados con el carácter Unicode 'ESPACIO SIN CRONOMETRO DE CERO ANCHO' (U+FEFF). Esto significa que los caracteres "extra" después de los puntos suspensivos no ocupan ningún espacio visible en la pantalla , sin embargo, pueden ser parte de la cadena.

Sin embargo, esto significa cualquier tipo de letra personalizado que utiliza para TextView widgets que utiliza con android:ellipsize también debe ser compatible con este carácter especial Unicode . No todas las fuentes lo hacen, y obtendrá artefactos en la representación en pantalla de sus cadenas acortadas si su fuente carece de este carácter (p. Ej., Aparecen X deshonestos al final de la línea).

+0

¡Oh hombre, debería haber leído todo el libro ;-) Gracias por ese consejo! – GabrielWeis

+1

@GabrielWeis: ¡Ja! Elegí hacer la cita, simplemente porque es un dolor de explicar, y no tenía ganas de volver a escribirla. Suponiendo que tiene derecho a preocuparse por su archivo de fuente, alguien con un editor de fuentes (y la experiencia para usar uno bien) debería ser capaz de agregar este glifo. – CommonsWare

+0

@CommonsWare: Gracias por la explicación, pero en mi caso veo estos artefactos en un HTC Hero (2.1) pero no en un Nexus One (2.2 o superior) ni en un Samsung Galaxy S (2.2 o superior).Si se trata de un problema relacionado con la fuente, ¿por qué? –

9

Tenía el mismo problema. Alguien con conocimiento de FontForge arregló el U + FEFF en mis fuentes personalizadas y ahora funcionan bien. Así es como describió lo que hizo:

"No soy bueno con Fontforge, así que hice trampa. Básicamente, abrí la fuente en Fontforge, seleccioné el carácter de espacio, ctrl + c para copiar, luego seleccioné FEFF, ctrl + v para pegar. Luego menú Métricas-> Establecer ancho y establecer en cero. Luego Archivo-> Generar fuentes. "

+0

gracias, lo arreglé usando este consejo –

Cuestiones relacionadas