प्रस्तुत करने से पहले दृश्य का आकार मापें मेरे पास एक टेक्स्ट व्यू है जो पाठ को प्रदर्शित करता है और समय चलाता है। मैं ViewVgetLineCount() विधि का उपयोग करना चाहता हूं यह देखने के लिए कि टेक्स्टव्यू कितनी पंक्तियां लेता है और तदनुसार विभिन्न कार्य करता है। समस्या यह है कि मुझे टेक्स्टव्यू को उसी विधि में ले जाने वाली लाइनों की संख्या निर्धारित करने की आवश्यकता है, जिसे यह जानने की आवश्यकता है कि यह कितनी लाइन लेता है। मैंने दो कॉल के बीच View.invalidate() को कॉल करने का प्रयास किया है लेकिन ऐसा कुछ भी ठीक नहीं लग रहा है। यदि संभव हो तो दृश्य को प्रस्तुत किए बिना मैं लाइनों की संख्या को मापना चाहता हूं लेकिन अगर मुझे इसे प्रस्तुत करना है तो मैं भी ऐसा करने के लिए खुलेगा। मुझे बताएं कि यह पर्याप्त विशिष्ट नहीं है और मैं और अधिक विशिष्ट होने की कोशिश करूंगा। धन्यवाद!एंड्रॉइड:
उत्तर
यह वास्तव में एंड्रॉइड में वास्तव में एक जटिल समस्या हो सकती है। यदि आपको पाठ सेट करने के समय पता होना चाहिए (यानी दृश्य प्रस्तुत किए जाने से पहले या प्रस्तुत किए जाने के करीब), तो आप केवल वास्तविक विकल्प हैं StaticLayout का उपयोग करना। आप जब तक पास समय प्रस्तुत करना इंतजार कर सकते हैं, तो आप एक viewTreeObserver उपयोग कर सकते हैं:
yourTextView.getViewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout(){
yourTextView.getLineCount();
}
}
onGlobalLayout कई बार कहा जा सकता है और कभी कभी (जो भी कारण के लिए) मैं पाया है कि विचारों वास्तव में अभी तक बाहर रखी नहीं हैं, इसलिए आपको कुछ लॉगिंग करना चाहिए और देखें कि क्या आप यह सुनिश्चित करने के लिए एक रास्ता खोज सकते हैं कि जो भी परिणाम आपको वास्तव में समझ में आता है (यानी एक पंक्ति गणना> 0)।
स्टेटिकलाइट्स एक अधिक जटिल विकल्प है जो आपको अपने दृश्य और लाइनों की संख्या देने में सक्षम होना चाहिए। वे ठीक से काम करने के लिए आपको कुछ सुधार करने की आवश्यकता कर सकते हैं, और आप दृश्य से रंग का उपयोग आप को मापने के लिए कोशिश कर रहे हैं सुनिश्चित करें:,
yourTextView.setText(newText);
//the last boolean should be true if you're using padding on your view
StaticLayout measure = new StaticLayout(yourTextView.getText(), yourTextView.getPaint(),
maxAvailableWidthForYourTextView, Layout.Alignment.ALIGN_NORMAL, 1.0f, 1.0f, false)
int numberOfLines = measure.getLineCount();
यदि आप करना चाहते हैं (या पहले से ही है) TextView subclassed आप साइज चेंज या ऑनमेज़र पर ओवरराइड कर सकते हैं और वहां लाइनों की संख्या प्राप्त करने का प्रयास करें। फिर, दृश्य वृक्ष पर्यवेक्षक के साथ, कभी-कभी उन लोगों को आपके विचार को मापने से पहले बुलाया जा सकता है, इसलिए आपको यह सुनिश्चित करने के लिए जांच करनी पड़ सकती है कि उन तरीकों से आपको जो भी मूल्य मिलता है, वह समझ में आता है।