2012-06-08 12 views
29

Sto utilizzando un carattere personalizzato .ttf nella mia app Android. Che carico nel modo consueto:Carattere personalizzato in Android viene visualizzato in modo diverso nelle diverse API

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

poi assegnare il mio carattere all'interno della mia attività ... roba abbastanza semplice:

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

Il problema che sto funzionando in è che su alcuni dispositivi utilizzando tardi API (l'ho notato specificamente in un emulatore per Asus Transformer), il testo appare leggermente più audace, meno uniforme in larghezza e più confuso nell'allineamento verticale. Con quest'ultima parte intendo che alcuni personaggi sono posizionati verticalmente un po 'più in alto o più in basso rispetto ad altri, dando al testo un tocco di montagne russe.

Considerate le schermate sottostanti

Questo è un testo reso su un emulatore con la stessa risoluzione e DPI come un trasformatore, ma utilizzando livello di API di Google 8.

i45.tinypic.com/142toud.png

Sembra piuttosto standard, destra?

Consideriamo ora il testo reso in un emulatore con la stessa risoluzione e DPI, ma utilizzando Google livello di API 15:

i47.tinypic.com/24zhekn.png

In un primo momento il testo potrebbe essere simile, anche se si può notare mi sembra un un po 'più audace. Tuttavia, guarda la "c" in "quick". Noterai che si trova più in basso, ed è più alto, della "c" nel primo rendering. Noterai anche che se guardi il fondo dei personaggi nella parola "quick", non sono allineati in basso.

Questi problemi possono sembrare piccoli, ma su schermi con molto testo, inizia a sembrare davvero poco professionale.

Chiunque ha visto questo o ha una spiegazione? Mi piacerebbe rendere il testo uniforme nelle API successive.

Grazie mille per il vostro tempo!

+0

Decisamente un rendering di font diverso in corso. Potrebbe essere antialiasing, suggerimento disattivato, possibilmente. Potresti vedere quale valore restituisce per 'textView.getPaintFlags()' per il livello API 8 e il livello API 15 e modificarlo? (@ me quindi ricevo una notifica e darò un'occhiata) – kcoppock

+0

@kcoppock Grazie per la risposta. getPaintFlags() restituisce 257 per entrambe le API. –

+0

Questo sembra simile, o forse un duplicato di http://stackoverflow.com/questions/9036184/custom-font-rendering-on-android-4-0-ice-cream-sandwich. Non è mai stato veramente risposto. – HandlerExploit

risposta

58

Okay, quindi sembra avere solo i seguenti flag applicate in entrambi i casi:

Paint.DEV_KERN_TEXT_FLAG 
Paint.ANTI_ALIAS_FLAG 

provare a fare questo, e vedere se i risultati siano diversi (non necessariamente migliore, ma anche visibile a tutti) :

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

Grande differenza! Il testo sembra effettivamente corretto! Grazie mille per l'input. Ecco una ripresa dei due emulatori ora, Transformer a sinistra:! [New Text Rendering] (http://i49.tinypic.com/nwzzaw.png) –

+0

Che bello! Pensavo che potesse fare il trucco. Direi che l'hanno disabilitata per impostazione predefinita sull'API più recente, ma si stavano ottenendo gli stessi valori di flag ... Non sono sicuro PERCHÉ esattamente questo funziona, ma sono contento che lo faccia. :) Se pensi che questo sia tutto ciò di cui hai bisogno, puoi contrassegnare questa domanda come risposta. – kcoppock

+0

L'ho contrassegnato come Risposta. Grazie! –

Problemi correlati