2012-01-19 15 views
6

मैं किसी दिए गए स्ट्रिंग के अवरोधक की ऊंचाई कैसे प्राप्त कर सकता हूं?मैं किसी दिए गए स्ट्रिंग के अवरोधक की ऊंचाई कैसे प्राप्त कर सकता हूं?

enter image description here

उदाहरण के लिए

,

  • abc 0.
  • abcl लौटना चाहिए लौटना चाहिए 0.
  • abcp आधारभूत करने के लिए descnder रेखा से दूरी लौटना चाहिए।
  • abclp को अवरोही रेखा से बेसलाइन तक दूरी वापस करनी चाहिए।

सबसे अच्छा मैं अब तक बाहर आया सकता

private int getDecender(String string, Paint paint) { 
    // Append "l", to ensure there is Ascender 
    string = string + "l"; 
    final String stringWithoutDecender = "l"; 

    final Rect bounds = new Rect(); 
    final Rect boundsForStringWithoutDecender = new Rect(); 
    paint.getTextBounds(string, 0, string.length(), bounds); 
    paint.getTextBounds(stringWithoutDecender, 0, stringWithoutDecender.length(), boundsForStringWithoutDecender); 
    return bounds.height() - boundsForStringWithoutDecender.height(); 
} 

लेकिन, मेरा कोड गंध है कि वे पर्याप्त नहीं हैं है। क्या कोई बेहतर और तेज़ तरीका है?

उत्तर

-1

आपको Paint.FontMetrics पर एक नज़र रखना चाहिए। वंश सदस्य आपको "सिंगल स्पेस टेक्स्ट के लिए बेसलाइन के नीचे अनुशंसित दूरी" देगा।

+0

प्रश्न कैसे पता लगाना है, क्या कोई स्ट्रिंग है जिसमें दिए गए स्ट्रिंग के भीतर गैर-शून्य मूल है। –

+0

क्षमा करें, मैंने बहुत जल्दी पढ़ा है। आपके पास शायद आपके कोड में सबसे अच्छा समाधान है। – emidander

3

असल में मैं वही कार्यक्षमता ढूंढ रहा था। यह पता चला है कि बहुत आसान तरीका है, आपको इसके लिए अलग-अलग फ़ंक्शन की भी आवश्यकता नहीं है।

यदि आप किसी दिए गए स्ट्रिंग पर getTextBounds() को कॉल करते हैं, तो लौटाए गए बाउंडिंग बॉक्स में पहले से ही वह जानकारी होगी।

उदाहरण के लिए:

paint.getTextBounds(exampleString1 , 0, exampleString1.length(), bounds); 

if (bounds.bottom > 0) Log.i("Test", "String HAS descender"); 
else Log.i("Test", "String DOES NOT HAVE descender"); 

सीधे शब्दों में कह bounds.top आप स्ट्रिंग की चढ़ाई बताता है (यह Y अक्ष 0 बिंदु स्ट्रिंग के आधार रेखा पर है के रूप में नकारात्मक मूल्य होता) और bounds.bottom आपको बताता है स्ट्रिंग का वंशज (जो वंश के तारों के लिए 0 या सकारात्मक मूल्य हो सकता है)।

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