2013-01-05 66 views
17

मेरे पास एक अज्ञात अधिकतम ऊंचाई के साथ TextView है, जो डिवाइस के डीपीआई/स्क्रीन रिज़ॉल्यूशन पर निर्भर है। इसलिए, उदाहरण के लिए, एमडीपीआई डिवाइस पर और अधिकतम ऊंचाई एक समय में केवल 2 लाइनों को दिखाने के लिए संभव बनाता है, एक मान जिसे एक अपरिभाषित संख्या तक बढ़ाया जा सकता है।इलिप्सिज़ एक बहुमुखी टेक्स्ट व्यू के लिए ठीक से काम नहीं कर रहा है, मनमाने ढंग से अधिकतम ऊंचाई

मेरा मुद्दा इलिप्सिज़ कार्यक्षमता से संबंधित है। मान लीजिए कि एक निश्चित डिवाइस 4 लाइनों को प्रदर्शित करने की अनुमति देता है। यदि मैं मैन्युअल रूप से लाइनों की अधिकतम संख्या सेट करता हूं, तो इस तरह ...

<TextView 
    android:id="@+id/some_id" 
    android:layout_width="fill_parent" 
    android:layout_height="0dip" 
    android:ellipsize="end" 
    android:maxLines="4" 
    android:singleLine="false" 
    android:layout_weight="1" 
    android:gravity="center_vertical" 
    android:text="This is some really really really really really long text" 
    android:textSize="15sp" /> 

... सब कुछ ठीक काम करता है। पाठ ठीक से फिट नहीं करता है, तो अंडाकार चौथी पंक्ति के अंत में जुड़ जाते हैं, इस तरह:

This is some 
really really 
really really 
really long... 

लेकिन मैं नहीं बल्कि एक स्थिर चर के रूप में लाइनों की संख्या सेट नहीं चाहते हैं, क्योंकि मैं डीपीआई/स्क्रीन रिज़ॉल्यूशन के किसी भी संयोजन के लिए समर्थन शामिल करना पसंद करूंगा। तो अगर मैं maxLines को दूर अंडाकार अब ठीक से लाइन चार पर दिखाया गया है, बजाय दिखा पाठ की एक अधूरी भाग:

This is some 
really really 
really really 
really long 

मैं थोड़ा TextView आकार में वृद्धि करते हैं, तो मैं देख सकता हूँ कि पाठ के बाकी अब भी है अन्य Views "पीछे" खींचा जा रहा है। परिवर्तनीय maxHeight को सेट करना प्रतीत नहीं होता है।

मुझे वास्तव में इस समस्या का समाधान नहीं मिल रहा है। कोई विचार? अगर यह मदद करता है, तो मैं केवल एंड्रॉइड v4.0.3 और ऊपर (एपीआई स्तर 15) के साथ काम कर रहा हूं।

उत्तर

27

TextViewTextView#getHeight() और TextView#getLineHeight() के साथ कितनी लाइनें फिट बैठती हैं इसकी गणना करें। फिर TextView#setMaxLines() पर कॉल करें।

ViewTreeObserver observer = textView.getViewTreeObserver(); 
observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
     int maxLines = (int) textView.getHeight() 
       /textView.getLineHeight(); 
     textView.setMaxLines(maxLines); 
     textView.getViewTreeObserver().removeGlobalOnLayoutListener(
       this); 
    } 
}); 
+0

पूरी तरह से काम करता है। आपका बहुत बहुत धन्यवाद! – DPR

+0

ईश्वरीय! मेरा दिन बचाया! – Roman

+2

नोट: रेखा ऊंचाई भिन्न हो सकती है! और विधि के लिए getLineHeight हमेशा उम्मीद के रूप में काम नहीं करेगा। यह उदाहरण के लिए हो सकता है जब पाठ के एक विशिष्ट भाग में फ़ॉन्ट आकार को बड़ा बनाने के लिए spannables का उपयोग करना। –

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

  • कोई संबंधित समस्या नहीं^_^