आपकी आवश्यकता के आधार पर ऊंचाई को मापने के विभिन्न तरीके हैं।
यदि आप निश्चित पाठ की थोड़ी मात्रा को सटीक रूप से केंद्रित करने जैसा कुछ कर रहे हैं, तो आप शायद चाहते हैं getTextBounds
। आप इस तरह की बाउंडिंग आयत प्राप्त कर सकते हैं
Rect bounds = new Rect();
mTextPaint.getTextBounds(mText, 0, mText.length(), bounds);
int height = bounds.height();
जैसा कि आप निम्नलिखित छवियों के लिए देख सकते हैं, अलग-अलग तार अलग-अलग ऊंचाइयां देंगे (लाल रंग में दिखाए गए)।
ये भिन्न ऊंचाइयां कुछ स्थितियों में नुकसान का कारण बन सकती हैं, जब आपको केवल एक निरंतर ऊंचाई की आवश्यकता होती है, चाहे वह कोई भी पाठ हो। अगला भाग देखें
आप फ़ॉन्ट मेट्रिक्स से फ़ॉन्ट की हाइट की गणना कर सकते हैं। ऊंचाई हमेशा समान होती है क्योंकि यह फ़ॉन्ट से प्राप्त की जाती है, किसी विशेष पाठ स्ट्रिंग से नहीं।
Paint.FontMetrics fm = mTextPaint.getFontMetrics();
float height = fm.descent - fm.ascent;
आधार रेखा वह रेखा है जिस पर पाठ बैठता है। वंश आमतौर पर सबसे दूर का वर्ण होता है जो रेखा के नीचे जाएगा और चढ़ाई आमतौर पर सबसे दूर का वर्ण रेखा के ऊपर जाएगा। ऊंचाई पाने के लिए आपको चढ़ाई को घटाना होगा क्योंकि यह एक नकारात्मक मूल्य है। (आधार रेखा है y=0
और y
स्क्रीन के नीचे उतरता है।)
निम्नलिखित छवि को देखें। दोनों स्ट्रिंग्स के लिए ऊंचाइयां हैं 234.375
।
यदि आप केवल पाठ ऊँचाई के बजाय लाइन की ऊँचाई चाहते हैं, तो आप निम्न कार्य कर सकते हैं:
float height = fm.bottom - fm.top + fm.leading; // 265.4297
ये bottom
और top
रेखा के हैं। अग्रणी (इंटरलाइन स्पेसिंग) आमतौर पर शून्य है, लेकिन आपको इसे वैसे भी जोड़ना चाहिए।
उपरोक्त चित्र इस परियोजना से आए हैं । फ़ॉन्ट मेट्रिक्स कैसे काम करता है, यह देखने के लिए आप इसके साथ खेल सकते हैं।
बहु-पंक्ति पाठ की ऊंचाई को मापने के लिए आपको एक का उपयोग करना चाहिए StaticLayout
। मैंने इस उत्तर में इसके बारे में कुछ विस्तार से बात की , लेकिन इस ऊंचाई को पाने का मूल तरीका इस प्रकार है:
String text = "This is some text. This is some text. This is some text. This is some text. This is some text. This is some text.";
TextPaint myTextPaint = new TextPaint();
myTextPaint.setAntiAlias(true);
myTextPaint.setTextSize(16 * getResources().getDisplayMetrics().density);
myTextPaint.setColor(0xFF000000);
int width = 200;
Layout.Alignment alignment = Layout.Alignment.ALIGN_NORMAL;
float spacingMultiplier = 1;
float spacingAddition = 0;
boolean includePadding = false;
StaticLayout myStaticLayout = new StaticLayout(text, myTextPaint, width, alignment, spacingMultiplier, spacingAddition, includePadding);
float height = myStaticLayout.getHeight();