2012-01-27 23 views
15

Al probar una aplicación que utiliza Helvetica Neue como fuente principal en Android 4.0, he descubierto que hay una incoherencia en la representación de tipografía en comparación con varias versiones diferentes de Android. Probamos esto en 2.1, 2.2.2, 2.3.5, 3.2, 4.0 y 4.0.3 con los mismos resultados cada vez. También hicimos estas pruebas con diferentes tipos de letra binarios con los mismos resultados.Representación de fuente personalizada en Android 4.0 (sándwich de helado)

Cualquier entrada o solución alternativa sería apreciada.

A continuación se muestra una captura de pantalla de una aplicación de ejemplo para mostrar los resultados no deseados, el primero es 2.3.5 y el segundo es 4.0.3.

2.3.5

4.0.3

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    TextView textView = new TextView(this); 
    textView.setText("Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."); 
    textView.setTypeface(Typeface.createFromAsset(getAssets(), "Helvetica Neue.ttf")); 
    textView.setTextSize(9); 
    setContentView(textView); 
} 
+0

Tal vez el tamaño de fuente predeterminado (u otras propiedades TextView) es diferente para cada uno? Tal vez tienes que configurarlo manualmente? – Oli

+0

Esto es solo una aplicación de ejemplo que se muestra arriba, en la aplicación de producción estamos usando muchos estilos diferentes y anulaciones de atributos TextView con los mismos resultados. – HandlerExploit

+0

¿se verá el mismo comportamiento al usar los valores de px? Podría tener algo con la escalabilidad de Android. – Warpzit

Respuesta

8

Aunque nunca encontramos una solución a la representación de errores Helvetica hemos sido capaces de convencer al cliente para cambiar a Roboto después de que les mostramos el error en una galaxia Nexo.


Actualización:

public class TextViewCompat extends TextView { 

    public TextViewCompat(Context context) { 
     super(context); 
     setup(context, null, 0); 
    } 

    public TextViewCompat(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     setup(context, attrs, 0); 
    } 

    public TextViewCompat(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     setup(context, attrs, defStyle); 
    } 

    private void setup(Context context, AttributeSet attrs, int defStyle) { 
     setPaintFlags(getPaintFlags() | Paint.SUBPIXEL_TEXT_FLAG); 
    } 
} 
+0

¿Este ejemplo de código actualizado solucionó el problema? – Peterdk

+0

@Peterdk Sí, es por eso que lo publiqué. – HandlerExploit

-2

ICS v14 + utiliza la fuente Roboto encontrado aquí: Android design

Sería mejor para establecer el tipo de letra manualmente si desea que se muestre la misma a través Todas las versiones.

Typeface mBoldType = Typeface.createFromAsset(getAssets(), "fonts/Roboto-Bold.ttf"); 
TextView mTextView = findById(R.id.text1); 
mTextView.setTypeface(mBoldType); 

Desafortunadamente no hay una forma rápida de hacer esto en el xml de fuentes personalizadas, pero una clase de ayuda adecuadamente programado debe hacer lo que necesita.

Si necesita una función de ejemplo, avíseme.

Lo que debe tenerse en cuenta, es que si se establece un tipo de letra de encargo, cosas como androide: fontStyle no va a funcionar, es decir, se necesita un tipo de letra negrita, cursiva tipo de letra, etc ..

+7

Esto no responde mi pregunta para nada, LÉALO. – HandlerExploit

0

Añadir tipo TTF archivo a la carpeta de activos, luego agregue el código siguiente

Tipo de letra tf = Tipoface.createFromAsset (getBaseContext(). getAssets(), "Helvetica.ttf");

continuación, agregue objeto TF para obtener el texto de la siguiente manera

textobjext.setTypeface(tf, Typeface.BOLD); 
+0

Solo para observar, si el tipo de letra carece de estos bits de estilo, falsificará el estilo, lo que podría generar discrepancias en diferentes dispositivos. O asegúrate de tener una Typeface con todos los estilos, o tener un tfBold, tfItalic, etc. ... –

+0

Esto no responde mi pregunta en absoluto, LÉALO. – HandlerExploit

0

Después de jugar un poco más que no he sido capaz de reproducir lo que ve.

Me lleva a creer que la fuente que está utilizando es mala.

puse todos mis tipos de letra como por mi otra respuesta, esto funciona muy bien para mí, ver pantallas:

Así el texto superior es Roboto-Normal A continuación, el texto a continuación es Roboto-Light, con <b></b> para hacer es fuerte.

Por lo tanto, 3 versiones, 3 tamaños de pantalla diferentes, dos densidades, Tipo de configuración manual. misma representación. No estoy seguro de cómo conseguir lo que está viendo. ¿Has probado con un tipo de letra diferente?

Voy a dar algunos ejemplos más de lo que estoy haciendo si eso pudiera ayudar?

Android 2.2

Android 2.3

Android 4.0.3

+1

Y sí, sé que hay algunos errores tipográficos :) –

+1

La pregunta es específica de Helvetica, Roboto se hizo especialmente para dispositivos móviles en mente. – HandlerExploit

Cuestiones relacionadas