2012-06-08 44 views
29

में अलग-अलग प्रस्तुत करता है मैं अपने एंड्रॉइड ऐप में एक कस्टम .ttf फ़ॉन्ट का उपयोग कर रहा हूं। मैं इसे हमेशा की तरह लोड:एंड्रॉइड में कस्टम फ़ॉन्ट विभिन्न एपीआई

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

तो मैं अपने गतिविधि के भीतर मेरी टाइपफेस आवंटित ... बिल्कुल स्पष्ट सामान:

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

समस्या मैं में चल रहा हूँ यह है कि कुछ उपकरणों पर बाद में उपयोग करते हुए एपीआई (मैंने विशेष रूप से एसस ट्रांसफार्मर के लिए एक एमुलेटर में देखा है), पाठ थोड़ा बोल्ड, चौड़ाई में कम वर्दी दिखता है, और ऊर्ध्वाधर संरेखण में अधिक जुड़ा हुआ है। उस अंतिम भाग से मेरा मतलब है कि कुछ पात्रों को लंबवत रूप से थोड़ा अधिक या दूसरों की तुलना में कम रखा जाता है, जिससे पाठ के लिए रोलर कोस्टर महसूस होता है।

नीचे

यह वही संकल्प और एक ट्रांसफार्मर के रूप में डीपीआई के साथ एक एमुलेटर पर प्रदान की पाठ, लेकिन का उपयोग करके Google एपीआई स्तर है 8.

i45.tinypic.com/142toud.png

सुंदर मानक लग रहा है स्क्रीन शॉट्स पर विचार करें, सही?

अब पाठ एक ही संकल्प और डीपीआई के साथ एक एमुलेटर में गाया पर विचार, लेकिन गूगल एपीआई स्तर 15 का उपयोग करते हुए: वह पहला लेख पर

i47.tinypic.com/24zhekn.png

, समान लग सकता है, हालांकि आप देख सकते हैं कि यह एक लगता है थोड़ा साहसी हालांकि, "त्वरित" में "सी" देखें। आप देखेंगे कि यह पहले प्रतिपादन में "सी" की तुलना में कम है, और लंबा है। आप यह भी देखेंगे कि यदि आप "त्वरित" शब्द में वर्णों के निचले हिस्से को देखते हैं, तो वे नीचे पर गठबंधन नहीं होते हैं।

ये समस्याएं छोटी लग सकती हैं, लेकिन बहुत सारे टेक्स्ट वाले स्क्रीन पर, यह वास्तव में गैर-व्यावसायिक दिखने लगती है।

किसी ने इसे देखा, या एक स्पष्टीकरण है? मैं बाद में एपीआई में पाठ को वर्दी दिखाना पसंद करूंगा।

आपके समय के लिए बहुत बहुत धन्यवाद!

+0

निश्चित रूप से कुछ अलग फ़ॉन्ट प्रतिपादन चल रहा है। एंटीअलाइजिंग हो सकता है, संभावित रूप से संकेत बंद कर दिया जा सकता है। क्या आप देख सकते हैं कि 'textView.getPaintFlags()' के लिए मान क्या है एपीआई स्तर 8, और एपीआई स्तर 15 दोनों के लिए रिटर्न, और इसे संपादित करें? (@ मुझे तो मुझे एक अधिसूचना मिलती है और मैं एक नज़र डालेगा) – kcoppock

+0

@kcoppock उत्तर के लिए धन्यवाद। getPaintFlags() दोनों एपीआई के लिए 257 देता है। –

+0

यह समान दिखता है, या शायद http://stackoverflow.com/questions/9036184/custom-font-rendering-on-android-4-0-ice-cream-andwich का डुप्लिकेट। यह वास्तव में कभी जवाब नहीं दिया गया था। – HandlerExploit

उत्तर

58

ठीक है, तो यह सिर्फ निम्नलिखित दोनों मामलों में लागू झंडे है लगता है:

Paint.DEV_KERN_TEXT_FLAG 
Paint.ANTI_ALIAS_FLAG 

यह करके देखें, और अगर परिणाम किसी भी अलग कर रहे हैं (जरूरी सुधार नहीं हुआ, लेकिन फिर भी ध्यान देने योग्य सभी) :

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

भारी अंतर! पाठ वास्तव में सही दिखता है! इनपुट के लिए बहुत बहुत धन्यवाद। यहां दो अनुकरणकर्ताओं का एक शॉट दिया गया है, बाईं ओर ट्रांसफॉर्मर:! [नया टेक्स्ट रेंडरिंग] (http://i49.tinypic.com/nwzzaw.png) –

+0

यह बढ़िया है! मैंने सोचा कि चाल चल सकती है। मैं कहूंगा कि वे डिफ़ॉल्ट रूप से नए एपीआई पर अक्षम कर देंगे, लेकिन आपको वही ध्वज मूल्य मिल रहे थे ... मुझे यकीन नहीं है कि यह वास्तव में क्यों काम करता है, लेकिन मुझे खुशी है कि यह करता है। :) यदि आपको लगता है कि यह सब कुछ आपको चाहिए, तो आप इस प्रश्न को उत्तर के रूप में चिह्नित कर सकते हैं। – kcoppock

+0

मैंने इसे उत्तर के रूप में चिह्नित किया है। धन्यवाद! –