2012-01-27 12 views
15

Durante il test di un'applicazione che utilizza Helvetica Neue come carattere principale su Android 4.0, ho riscontrato un'incoerenza nel rendering del carattere rispetto alle diverse versioni di Android. Abbiamo testato questo su 2.1, 2.2.2, 2.3.5, 3.2, 4.0 e 4.0.3 con gli stessi risultati ogni volta. Abbiamo anche fatto questi test con diversi binari di caratteri tipografici con gli stessi risultati.Rendering personalizzato dei caratteri su Android 4.0 (sandwich al gelato)

Qualsiasi input o soluzione alternativa sarebbe apprezzato.

Di seguito è uno screenshot da un'applicazione di esempio per mostrare i risultati indesiderati, il primo è 2.3.5 il secondo è 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

Forse la dimensione del font di default (o altre proprietà TextView) è diverso per ciascuno? Forse devi impostarlo manualmente? – Oli

+0

Questa è solo un'applicazione di esempio visualizzata sopra, nell'applicazione di produzione stiamo utilizzando molti stili diversi e l'attributo di TextView sostituisce gli stessi risultati. – HandlerExploit

+0

si vedrà lo stesso comportamento quando si usano valori px? Potrebbe avere qualcosa con come il bilanciamento automatico di Android. – Warpzit

risposta

8

Anche se non abbiamo mai trovato una soluzione per il rendering di bug Helvetica siamo stati in grado di convincere il cliente a passare a Roboto dopo abbiamo mostrato loro il bug su un Galaxy Nexus.


Aggiornamento:

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

Questo esempio di codice aggiornato ha risolto il problema? – Peterdk

+0

@Peterdk Sì, è per questo che l'ho pubblicato. – HandlerExploit

-2

ICS V14 + utilizza il font Roboto trovato qui: Android design

Sarebbe meglio impostare manualmente la faccia tipo se si desidera visualizzare lo stesso in tutte le versioni.

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

Purtroppo non c'è modo rapido per fare questo nel xml per i font personalizzati, ma una classe di supporto correttamente programmato dovrebbe fare quello che ti serve.

Se hai bisogno di una funzione di esempio fammi sapere.

Quale dovrebbe essere notato, è che se si imposta un carattere personalizzato, le cose come Android: fontStyle non funziona, cioè, è necessario un carattere grassetto, corsivo carattere ecc ..

+7

Questo non risponde alla mia domanda, LEGGERE. – HandlerExploit

0

Aggiungi tipo di font TTF file nella cartella delle risorse, quindi aggiungere sotto il codice

Carattere tf = Typeface.createFromAsset (getBaseContext(). getAssets(), "Helvetica.ttf");

quindi aggiungere oggetto tf alla visualizzazione del testo come di seguito

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

Giusto per notare, se il carattere tipografico manca di questi bit di stile, simulerà lo stile, il che potrebbe causare discrepanze su dispositivi diversi. O assicurati di avere un carattere tipografico con tutti gli stili in esso, o avere un tfBold, tfItalic ecc ... –

+0

Questo non risponde alla mia domanda, LEGGERE. – HandlerExploit

0

Dopo aver giocato un po 'non sono stato in grado di riprodurre ciò che si vede.

Mi porta a credere che il font che si sta usando sia cattivo.

ho impostato tutti i miei caratteri tipografici come per il mio altra risposta, questo funziona bene per me, vedere schermi:

modo che il testo superiore è Roboto-Normal Poi il testo che segue è Roboto-Light, con <b></b> per fare it strong.

Quindi 3 versioni, 3 diverse dimensioni dello schermo, due densità, impostare manualmente il carattere. stesso rendering. Non sei sicuro di come ottieni ciò che stai vedendo. Hai provato con un carattere tipografico diverso?

Fornirò altri esempi di ciò che sto facendo se ciò potrebbe essere d'aiuto?

Android 2.2

Android 2.3

Android 4.0.3

+1

E sì, so che ci sono alcuni errori di battitura :) –

+1

La domanda è specifica per Helvetica, Roboto è stato creato appositamente per i dispositivi mobili. – HandlerExploit

Problemi correlati