मैं अब पिछले कुछ दिनों के लिए यह एक यह पता लगाने की कोशिश कर रहे हैं, और कोई सफलता मिली है ...एंड्रॉयड Spannable पंक्ति की ऊंचाई
मैं एंड्रॉयड सीख रहा हूँ अभी, और वर्तमान में एक कैलकुलेटर बनाने हूँ इतिहास के साथ मेरी शिक्षा परियोजना के रूप में। मेरे पास एक टेक्स्ट व्यू है जो सभी इतिहास प्रदर्शित करने के लिए ज़िम्मेदार है ... मैं एक डिजिटल फ़ॉन्ट का उपयोग कर रहा हूं जो कैलकुलेटर फ़ॉन्ट की तरह दिखता है, लेकिन यह केवल अंकों और दशमलव और अल्पविरामों के लिए अच्छा दिखता है। मैं चाहता हूं कि सभी ऑपरेटरों को हाइलाइट किया जाए और एक अलग फ़ॉन्ट में (इस समय एरियल संकीर्ण)। मैं इसे एक स्पैन करने योग्य स्ट्रिंग का उपयोग करके खूबसूरती से काम करने में सक्षम हूं, जहां मैं अपने कस्टम फोंट को लागू करने के लिए एक कस्टम रंग के साथ-साथ एक कस्टम टाइप टाइप स्पेस क्लास का उपयोग कर एक फ़ॉन्ट निर्दिष्ट कर रहा हूं।
समस्या ... जब मैं टाइपफेस को मिलाता हूं, तो लाइन ऊंचाई के साथ एक समस्या प्रतीत होती है, इसलिए मुझे this post मिला जो स्पैन करने योग्य टेक्स्ट की प्रत्येक अतिरिक्त पंक्ति में लाइन ऊंचाई लागू करने के लिए एक और कस्टम परिभाषित वर्ग का उपयोग करता है:
public class CustomLineHeightSpan implements LineHeightSpan{
private final int height;
public CustomLineHeightSpan(int height){
this.height = height;
}
@Override
public void chooseHeight(CharSequence text, int start, int end, int spanstartv, int v, FontMetricsInt fm) {
fm.bottom += height;
fm.descent += height;
}
}
यह काम नहीं प्रतीत होता है, और मैं यह नहीं समझ सकता कि क्यों। यदि मैं अलग-अलग टाइपफेस लागू नहीं करता हूं, तो यह पहली पंक्ति के ऊपर कोई स्थान नहीं, और लाइनों के बीच लगभग 5px रिक्ति के साथ अपेक्षित प्रदर्शित करता है। जब मैं वैकल्पिक टाइपफेस लागू करता हूं, तो पाठ की पहली पंक्ति के ऊपर लगभग 10 से 15px की जगह होती है और रेखा अंतर लगभग 10 से 15px के बारे में होता है।
फ़ॉन्ट आकार, केवल टाइपफ़ेस में कोई अंतर नहीं है। मैं क्या खो रहा हूँ। मैंने कस्टमलाइन हाइटस्पैन लागू किया जो लाइनहेइटस्पैन लागू करता है और चुनिंदा हाइट विधि को ओवरराइड करता है। मैं इसे इस प्रकार कहता हूं:
वर्डटोस्पेन.सेटस्पैन (नया कस्टमलाइन हाइटस्पैन (10), ऑपरेटरपॉशन.जेट (ii), ऑपरेटरपॉशन .get (ii) + 1, स्पैन करने योग्य .SPAN_EXCLUSIVE_EXCLUSIVE);
ऐसा लगता है कि मैंने कस्टमलाइन हेइटस्पैन को कॉल में क्या रखा है। कुछ भी नहीं बदलता है ...
किसी को भी कोई विचार है कि मुझे क्या याद आ रहा है ... मुझे यकीन है कि यह एक "मुझे विश्वास नहीं है कि मुझे यह याद आया" जवाब है, लेकिन इसे समझ में नहीं आता पल।
मदद लोग :-)
कैसे इस विधि chooseHeight कॉल करने के लिए मदद करता है? – AndroidCrazy
एंड्रॉइड आंतरिक रूप से इस विधि को कॉल करता है। आपको बस इतना करना है कि अपनी स्ट्रिंग को अवधि दें। यदि आप और जानना चाहते हैं, तो android.text.StaticLayout क्लास देखें। अन्य स्पैन के तरीकों को भी वहां बुलाया जाता है। – thehayro
यदि हम कभी मिलते हैं तो मैं आपको एक बियर (या पसंद के अन्य पेय) का भुगतान करता हूं - यह सामान सुपर अनियंत्रित है, और इसे ढूंढने में पागल समय लगता है। – secureboot