2012-06-08 10 views
29

Estoy usando una fuente .ttf personalizada en mi aplicación de Android. Me carga de la manera habitual:La fuente personalizada en Android se representa de manera diferente en diferentes API

myTypeface = Typeface.createFromAsset(getAssets(), "myTypeface.ttf"); 

entonces asignar mi tipo de letra dentro de mi actividad ... cosas bastante sencillo:

TextView tv = (TextView) findViewById(R.id.sample_text); 
tv.setTextSize(12); 
tv.setTypeface(App.myTypeface); 

El problema que estoy corriendo en es que en algunos dispositivos utilizando más tarde API (lo he notado específicamente en un emulador para Asus Transformer), el texto parece un poco más audaz, menos uniforme en ancho y más desordenado en alineación vertical. En esta última parte, quiero decir que algunos personajes se colocan verticalmente un poco más arriba o más abajo que otros, lo que le da un toque de montaña rusa al texto.

Considere las siguientes capturas de pantalla

Esto es texto representado en un emulador con la misma resolución y ppp como un transformador, pero utilizando nivel de API de Google 8.

i45.tinypic.com/142toud.png

Parece bastante estándar, ¿derecho?

Consideremos ahora el texto representado en un emulador con la misma resolución y ppp, pero utilizando Google API de nivel 15:

i47.tinypic.com/24zhekn.png

Al principio, el texto puede ser similar, aunque es posible que note que parece una un poco más audaz. Sin embargo, mira la "c" en "rápido". Notarás que está más abajo y es más alto que la "c" en la primera representación. También observará que si mira la parte inferior de los caracteres en la palabra "rápido", no están alineados en la parte inferior.

Estos problemas pueden parecer pequeños, pero en pantallas con mucho texto, empieza a parecer poco profesional.

¿Alguien ha visto esto o tiene alguna explicación? Me encantaría que el texto se vea uniforme en API posteriores.

¡Muchas gracias por su tiempo!

+0

Definitivamente se están realizando algunas representaciones de fuentes diferentes. Podría ser antialiasing, sugerencia apagada, posiblemente. ¿Podría ver cuál es el valor de 'textView.getPaintFlags()' para el nivel 8 de API, y el nivel 15 de API, y editarlo? (@me para recibir una notificación y voy a echar un vistazo) – kcoppock

+0

@kcoppock Gracias por la respuesta. getPaintFlags() devuelve 257 para ambas API. –

+0

Esto se ve similar, o tal vez un duplicado de http://stackoverflow.com/questions/9036184/custom-font-rendering-on-android-4-0-ice-cream-sandwich. Nunca fue realmente respondida. – HandlerExploit

Respuesta

58

Bueno, por lo que parece tener sólo las siguientes banderas aplicadas en ambos casos:

Paint.DEV_KERN_TEXT_FLAG 
Paint.ANTI_ALIAS_FLAG 

trate de hacer esto, y ver si los resultados son diferentes (no necesariamente mejorado, pero aún perceptible en absoluto) :

textView.setPaintFlags(textView.getPaintFlags() | Paint.SUBPIXEL_TEXT_FLAG); 
+1

¡Enorme diferencia! ¡El texto realmente se ve correcto! Muchas Gracias por la entrada. Aquí hay una foto de los dos emuladores ahora, Transformer a la izquierda:! [New Text Rendering] (http://i49.tinypic.com/nwzzaw.png) –

+0

¡Eso es genial! Pensé que podría hacer el truco. Diría que han desactivado eso de forma predeterminada en la API más nueva, pero obtuviste los mismos valores de indicador ... No estoy seguro de POR QUÉ funciona exactamente, pero me alegra que sí. :) Si crees que esto es todo lo que necesitas, puedes marcar esta pregunta como respondida. – kcoppock

+0

Lo he marcado como Respondido. ¡Gracias! –

Cuestiones relacionadas