2011-06-03 15 views
17

तो मैं पाठ के खंड की चौड़ाई को मापने के लिए पेंट की माप टेक्स्ट() विधि का उपयोग करता हूं, लेकिन मैं एक निश्चित पाठ आकार के आधार पर पाठ को मापना चाहता था। मान लें कि मैं एक टेक्स्ट सेगमेंट की चौड़ाई प्राप्त करना चाहता था जो 20 स्केल किए गए पिक्सेल होंगे जब यह एक निश्चित टेक्स्ट व्यू पर होगा। मैंने निम्नलिखित कोशिश की:एंड्रॉइड: माप टेक्स्ट() स्केल किए गए पिक्सल पर आधारित पिक्सल

Paint paint = new Paint(); 
paint.setTextSize(20); 
paint.measureText("sample text"); 

हालांकि, यह काम नहीं कर रहा प्रतीत होता है। मेरा मानना ​​है कि यह एक छोटे से पाठ आकार के संबंध में चौड़ाई लौट रहा है। मुझे लगता है कि मुझे ऐसा कुछ याद आ रहा है जो मुझे चेहरे में खुद को थप्पड़ मार देगा और जड़ी-बूटियों के झुंड को चिल्लाएगा।

उत्तर

38

तुम इतनी तरह densityMultiplier प्राप्त करने की आवश्यकता:

final float densityMultiplier = getContext().getResources().getDisplayMetrics().density; 
final float scaledPx = 20 * densityMultiplier; 
paint.setTextSize(scaledPx); 
final float size = paint.measureText("sample text"); 
+0

बहुत बहुत धन्यवाद! मैं इस धारणा के तहत था कि सेटटेक्स्ट साइज का पैरामीटर पहले ही स्केल किए गए पिक्सल में था, इसलिए मैं उलझन में था कि मैं कहां गलत हो रहा था। अभी ठीक काम करता है। :-) – Vinay

+0

मेरे लिए काम नहीं कर रहा है, मेरे पास टेक्स्टस्पस 20sp पर सेट है और यह कोड चल रहा है आकार मुझे अपेक्षा से छोटा कुछ देता है – schwiz

+0

अपने फ़ॉन्ट आकार वरीयता की जांच करें: sp स्केल-स्वतंत्र पिक्सल - यह डीपी इकाई की तरह है, लेकिन यह उपयोगकर्ता के फ़ॉन्ट आकार वरीयता से भी स्केल किया जाता है। यह अनुशंसा की जाती है कि आप फ़ॉन्ट आकार निर्दिष्ट करते समय इस इकाई का उपयोग करें, इसलिए उन्हें स्क्रीन घनत्व और उपयोगकर्ता की प्राथमिकता दोनों के लिए समायोजित किया जाएगा। –

1

मुझे ऐसा करने पर ऐसा कुछ करना है।

int textSize = 20; 
for(int i = 2; i<18 && curTextSize< textSize;i+=2) 
{ 
    this.label.setTextSize(i); 
    curTextSize = this.label.getPaint().measureText(this.label.getText().toString()); 
} 
-1

Paint.SetLinearText(true) 

वह मेरे लिए समस्या हल की कोशिश करो।

0

मैं नहीं पर्याप्त प्रतिष्ठा अंक जवाब पर स्वीकार किए जाते हैं लेकिन उत्तर पर @schwiz और @AndreasEK द्वारा टिप्पणियों के संदर्भ में टिप्पणी करने के लिए क्या:, गद्दी,

measureText()getTextBounds() के साथ शामिल नहीं है इसलिए यह संभव है कि उनकी समस्या का समाधान बाएं और दाएं पैडिंग (या प्रारंभ और अंत पैडिंग) जोड़ना है

final float scaleFactor = getContext().getResources().getDisplayMetrics().density; 
final float scaledPx = 20 * scaleFactor; 
paint.setTextSize(scaledPx); 
final float padding = scaleFactor * (textView.getPaddingStart() + textView.getPaddingEnd()); 
final float size = paint.measureText("sample text") + padding;