अगर संभव हो तो मैं भी ऊंचाई हासिल करना चाहूंगा।
अगर संभव हो तो मैं भी ऊंचाई हासिल करना चाहूंगा।
जवाबों:
आप getTextBounds(String text, int start, int end, Rect bounds)
किसी पेंट ऑब्जेक्ट की विधि का उपयोग कर सकते हैं । आप या तो आपके द्वारा प्रदत्त पेंट ऑब्जेक्ट का उपयोग कर सकते हैं या TextView
अपने वांछित टेक्स्ट उपस्थिति के साथ खुद का निर्माण कर सकते हैं।
एक टेक्स्टव्यू का उपयोग करके आप निम्नलिखित कार्य कर सकते हैं:
Rect bounds = new Rect();
Paint textPaint = textView.getPaint();
textPaint.getTextBounds(text, 0, text.length(), bounds);
int height = bounds.height();
int width = bounds.width();
textView.setTextSize()
।
यदि आपको केवल उस चौड़ाई की आवश्यकता है जिसका आप उपयोग कर सकते हैं:
float width = paint.measureText(string);
http://developer.android.com/reference/android/graphics/Paint.html#measureText(java.lang.String)
TextPaint paint = new TextPaint(); paint.setTextSize(textSize);
। textSize
पिक्सल में है।
एक पाठ के लिए दो अलग-अलग चौड़ाई के उपाय हैं। एक पिक्सेल की संख्या है जिसे चौड़ाई में खींचा गया है, दूसरा है 'पिक्सल' की संख्या जो कर्सर को पाठ खींचने के बाद उन्नत किया जाना चाहिए।
paint.measureText और paint.getTextWidths पिक्सल की संख्या (फ्लोट में) लौटाता है जिसे कर्सर को दिए गए स्ट्रिंग को खींचने के बाद उन्नत किया जाना चाहिए। जैसा कि अन्य उत्तर में उल्लेख किया गया है, पेंट किए गए पिक्सेल रंग की संख्या का उपयोग करें। मेरा मानना है कि इसे फॉन्ट का 'एडवांस' कहा जाता है।
कुछ फोंट के लिए ये दोनों माप अलग-अलग (एक जैसे) होते हैं, उदाहरण के लिए फॉन्ट ब्लैक चांसरी में ऐसे अक्षर होते हैं जो अन्य अक्षरों (ओवरलैपिंग) को बढ़ाते हैं - राजधानी 'एल' देखें। पिक्सेल का रंग पाने के लिए अन्य उत्तर में बताए अनुसार paint.getTextBounds का उपयोग करें ।
मैंने इस तरह से चौड़ाई मापी है:
String str ="Hiren Patel";
Paint paint = new Paint();
paint.setTextSize(20);
Typeface typeface = Typeface.createFromAsset(getAssets(), "Helvetica.ttf");
paint.setTypeface(typeface);
paint.setColor(Color.BLACK);
paint.setStyle(Paint.Style.FILL);
Rect result = new Rect();
paint.getTextBounds(str, 0, str.length(), result);
Log.i("Text dimensions", "Width: "+result.width());
इससे आपको मदद मिलेगी।
सबसे अधिक संभावना है कि आप दिए गए फ़ॉन्ट के साथ दिए गए स्ट्रिंग के पाठ के लिए चित्रित आयामों को जानना चाहते हैं (यानी एक विशेष Typeface
रूप से जैसे कि "sans-serif" फ़ॉन्ट परिवार के साथ BOLD_ITALIC शैली, और विशेष आकार sp या px में)।
पूर्ण-उड़ा को फुलाए जाने के बजाय TextView
, आप निम्न स्तर पर जा सकते हैं और एकल-पंक्ति पाठ के Paint
लिए सीधे ऑब्जेक्ट के साथ काम कर सकते हैं , उदाहरण के लिए:
// Maybe you want to construct a (possibly static) member for repeated computations
Paint paint = new Paint();
// You can load a font family from an asset, and then pick a specific style:
//Typeface plain = Typeface.createFromAsset(assetManager, pathToFont);
//Typeface bold = Typeface.create(plain, Typeface.DEFAULT_BOLD);
// Or just reference a system font:
paint.setTypeface(Typeface.create("sans-serif",Typeface.BOLD));
// Don't forget to specify your target font size. You can load from a resource:
//float scaledSizeInPixels = context.getResources().getDimensionPixelSize(R.dimen.mediumFontSize);
// Or just compute it fully in code:
int spSize = 18;
float scaledSizeInPixels = TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_SP,
spSize,
context.getResources().getDisplayMetrics());
paint.setTextSize(scaledSizeInPixels);
// Now compute!
Rect bounds = new Rect();
String myString = "Some string to measure";
paint.getTextBounds(myString, 0, myString.length(), bounds);
Log.d(TAG, "width: " + bounds.width() + " height: " + bounds.height());
के लिए बहु लाइन या स्पान किए गए पाठ ( SpannedString
), एक प्रयोग करने पर विचार StaticLayout
जिसमें आप चौड़ाई प्रदान करते हैं और ऊंचाई निकाले जाते हैं,। एक कस्टम दृश्य में कैनवास पर टेक्स्ट को मापने और आरेखित करने पर बहुत विस्तृत उत्तर के लिए, देखें: https://stackoverflow.com/a/41779935/954643
इसके अलावा @ arberg के जवाब में पिक्सेल के बारे में नीचे दी गई अग्रिम चौड़ाई ("फ्लोट में पिक्सेल की संख्या) जो दी गई स्ट्रिंग को खींचने के बाद कर्सर को उन्नत किया जाना चाहिए"), अगर आपको उससे निपटने की आवश्यकता है।
मैं एक स्थिर पाठ के उपयोग के साथ एक बेहतर पाठ ( ) की सटीक चौड़ाई प्राप्त करने का एक बेहतर तरीका (अधिक बहुमुखी तो वर्तमान स्वीकृत उत्तर) साझा करना चाहता हूं :String
StaticLayout
StaticLayout.getDesiredWidth(text, textPaint))
यह विधि से अधिक सटीक है textView.getTextBounds()
, क्योंकि आप एक बहु-रेखा में एक पंक्ति की चौड़ाई की गणना कर सकते हैं TextView
, या आप TextView
(उदाहरण के लिए एक कस्टम View
कार्यान्वयन में) के साथ शुरू करने के लिए उपयोग नहीं कर सकते हैं ।
यह तरीका समान है textPaint.measureText(text)
, हालांकि यह दुर्लभ मामलों में अधिक सटीक लगता है।