एक पेंट में Android सेट कस्टम फ़ॉन्ट


91

मैं एक पेंट में एक पाठ आकर्षित करना चाहता हूं। एक कस्टम फॉन्ट ( पूर्व हेल्वेटिका ) और बोल्ड के साथ इसे कैसे आकर्षित करें ? मैं एक सिस्टम फ़ॉन्ट का उपयोग करने और उसे परिसंपत्तियों से नहीं बनाने के लिए प्राथमिकता दूंगा। धन्यवाद।


"पेंट": क्या आपका मतलब है Canvas?
टोनी द पोनी

हां, मुझे कुछ शैलियों को सेट करने के लिए पेंट की आवश्यकता है ...
बुडा गैवरिल

लोकेल के अनुसार फॉन्ट कैसे सेट करें, उदाहरण के लिए अंग्रेजी के लिए हम arial.ttf का उपयोग करना चाहते हैं और कोरियाई के लिए मैं gothic_B.ttf का उपयोग करना चाहता हूं। यह एंड्रॉइड में कैनवास पर पेंट के साथ कैसे पॉसिबल है
द्विवेदी जी

@DwivediJi: क्या आपने पोस्ट करने की कोशिश की है कि किसी और के सवाल पर टिप्पणी के बजाय, स्टैकऑवरफ्लो प्रश्न के रूप में?
माइकल शेपर

जवाबों:


164

यदि "कस्टम फ़ॉन्ट" से आपका मतलब है कि आप एक संपत्ति के रूप में आपूर्ति कर रहे हैं, तो निम्न कोड काम करना चाहिए:

Typeface plain = Typeface.createFromAsset(assetManager, pathToFont); 
Typeface bold = Typeface.create(plain, Typeface.DEFAULT_BOLD)
Paint paint = new Paint();
paint.setTypeface(bold);
canvas.drawText("Sample text in bold",0,0,paint);

हेल्वेटिका स्थापित नहीं है, लेकिन मैंने तुलना करने के लिए कुछ स्थापित फोंट का उपयोग किया है। अगर मैं संपत्ति से एक फ़ॉन्ट का उपयोग कर रहा हूं, तो क्या आपके पास बोल्ड सेट करने का कोई विचार है?
बुडा गैवरिल

6
प्रयास करें: Typeface plain = Typeface.createFromAsset(assetManager, pathToFont); Typeface bold = Typeface.create(plain, Typeface.DEFAULT_BOLD)
टोनी द पोनी

2
@TonythePony आपका कोड मेरे लिए काम नहीं करता है। टाइपफेस फॉन्टफेस = टाइपफेस.क्रिएटफ्रॉमसेट (गेटअसेट्स), "फोंट / कॉमिक। टीटीएफ); टाइपफेस फेस = टाइपफेस.क्रिएट (फॉन्टफेस, टाइपफेस.बॉल्ड); पेंट पेंट = नया पेंट (); paint.setTextAlign (Paint.Align.CENTER); paint.setColor (Color.WHITE); paint.setTextSize (10); paint.setTypeface (चेहरा); paint.setFlags (Paint.ANTI_ALIAS_FLAG);
द्विवेदी जी

1
क्या आपने कोशिश की getContext().getAssets()?
वेस्ले

2
Typeface.DEFAULT_BOLDमुझे मुद्दों के रूप में अच्छी तरह से दिया, लेकिन Typeface.BOLDकाम करने के लिए बदल रहा है
CrandellWS

25

यदि आप अपने फोंट के लिए एक्सएमएल में एंड्रॉइड के नए फ़ॉन्ट्स का उपयोग कर रहे हैं, तो पेंट के लिए उपयोग किए जाने वाले टाइपफेस को प्राप्त करने के लिए:

val customTypeface = ResourcesCompat.getFont(context, R.font.myfont)

या यदि आपका न्यूनतम Android API> = 26 है

val customTypeface = resources.getFont(R.font.myfont)

फिर इसे अपने पेंट ऑब्जेक्ट पर लागू करने के लिए:

mTextPaint.typeface = customTypeface

अधिक जानकारी के लिए https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml#fonts-in-code देखें


16

पेंट क्लास के लिए इसका उपयोग करें:

 Paint paint = new Paint();
   paint.setTypeface(Typeface.create("Arial",Typeface.ITALIC));

9

यदि आपके पास पहले से ही उपयोग में एक फ़ॉन्ट है और आप उस के बोल्ड संस्करण का उपयोग करना चाहते हैं तो आप ऐसा कर सकते हैं।

currentPainter = new Paint(Paint.ANTI_ALIAS_FLAG);
currentPainter.setColor(Color.WHITE);
currentPainter.setTextSize(Utils.sp2px(getResources(), 14)); // set font size
Typeface currentTypeFace =   currentPainter.getTypeface();
Typeface bold = Typeface.create(currentTypeFace, Typeface.BOLD);
currentPainter.setTypeface(bold);

मैंने ऊपर दिए गए उत्तर का उपयोग किया, लेकिन यह संशोधन मेरे लिए आवश्यक था - इसलिए मैंने सोचा था कि मैं इसका उल्लेख करूंगा


1

यदि आप संसाधनों से एक फ़ॉन्ट का उपयोग करना चाहते हैं (कोटलिन):

val textPaint = TextPaint()
textPaint.typeface = resources.getFont(R.font.font_name)

यह सवाल से संबंधित नहीं हो सकता है, लेकिन यह वही है जो मैं देख रहा था - शायद किसी को इसकी भी आवश्यकता होगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.