2011-05-25 11 views
10

के लिए काम नहीं कर रहा है पेंट.सेट टाइप टाइप इटैलिक के लिए काम नहीं कर रहा है या मैं कुछ गलत तरीके से कर रहा हूं। मैं सामान्य, बोल्ड, मोनोस्पेस, और सेरिफ़ टेक्स्ट बना सकता हूं, लेकिन मैं इटैलिक टेक्स्ट नहीं बना सकता। यह हमेशा सामान्य दिखता है (या बोल्ड-इटैलिक के मामले में, यह बोल्ड दिखता है)।एंड्रॉइड पेंट.सेट टाइपफेस इटालिक

//This will appear monospace 
    paint.setTypeface(Typeface.MONOSPACE); 
    canvas.drawText("foo", 10, 10, paint); 

    //This will appear serif 
    paint.setTypeface(Typeface.SERIF); 
    canvas.drawText("foo", 10, 10, paint); 

    //This will appear bold 
    paint.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD)); 
    canvas.drawText("foo", 10, 10, paint); 

    //This will NOT appear italic <=== PROBLEM 
    paint.setTypeface(Typeface.defaultFromStyle(Typeface.ITALIC)); 
    canvas.drawText("foo", 10, 10, paint); 

    // This isn't working either <=== PROBLEM 
    paint.setTypeface(Typeface.create(Typeface.SANS_SERIF, Typeface.ITALIC)); 

तो अब सवाल: क्या इसके लिए एक ज्ञात कामकाज है? मेरा सरल लक्ष्य इटैलिक शैली के साथ कुछ शब्दों को आकर्षित करना है ...

उत्तर

14

एक ही कठिनाई का सामना करने के बाद, मुझे TextView स्रोत कोड में मछली पकड़ने का समाधान मिला। इस प्रयास करें:

paint.setTextSkewX(-0.25f); 
+0

यह मेरे लिए काम करता है, धन्यवाद! –

+0

setTextSkewX विधि का उपयोग करने से पहले, टाइपफ़ेस को सामान्य पर सेट करें, अन्यथा एक डिफॉल्ट फ़ॉन्ट के लिए ITALIC मोड का समर्थन करने वाले उपकरणों पर आवश्यकतानुसार एक टेक्स्ट को बहुत अधिक स्कैन किया जाएगा। तो, इस तरह का उपयोग करें: paint.setTypeface (Typeface.create (Typeface.DEFAULT, Typeface.NORMAL); paint.setTextSkewX (-0.25f); –

8

मुझे एक ही समस्या है। ऐसा लगता है कि सभी एंड्रॉइड टाइपफेस इटालिक शैली का समर्थन नहीं करते हैं। निम्नलिखित का प्रयास करें, मैंने मेरे लिए काम किया है:

paint.setTypeface(Typeface.create(Typeface.SERIF,Typeface.ITALIC)); 

बस SERIF के साथ ठीक काम करता है। डिफॉल्ट, मोनोस्पेस, SANS_SERIF इस शैली को शामिल करता है।

पीएस मैं एपीआई 10 के बारे में बात कर रहा हूं।

+0

हाँ यदि आपका लक्ष्य एपीआई 10 और इसके बाद के संस्करण है क्योंकि गूगल समस्या तय। तो यह समाधान भी ठीक है। मेरे कुछ ऐप्स को अभी भी एपीआई 4 संगत होना चाहिए ... –

1

आदेश उपकरणों जो इसे एक डिफ़ॉल्ट फ़ॉन्ट के लिए समर्थन नहीं करते के लिए एक इटैलिक मोड पाने के लिए, हम setTextSkewX विधि का उपयोग करना चाहिए। हालांकि, इसे लागू करने से पहले हमें यह सुनिश्चित करना होगा कि एक इटालिक मोड समर्थित नहीं है। हम इसे एक अस्थायी TextView ऑब्जेक्ट बनाकर और दोनों चौड़ाई (सामान्य और ITALIC) में अपनी चौड़ाई को मापकर प्राप्त करते हैं। यदि उनकी चौड़ाई समान हैं, तो इसका मतलब है कि एक इतालवी मोड समर्थित नहीं है।

कृपया, एक और सवाल में प्रस्तुत एक समाधान पर एक नज़र डालें: Samsung devices supporting setTypeface(Typeface.Italic)?

संबंधित मुद्दे