2011-02-06 21 views
6

की ऊंचाई प्राप्त करें मेरे पास कुछ टेक्स्ट है जो TextView में रखा जाएगा। मैंने setText() का उपयोग किया था।टेक्स्ट व्यू

अब मुझे TextView में टेक्स्ट की संख्या या ऊंचाई की संख्या की आवश्यकता है। मैंने getHeight() का उपयोग करने का प्रयास किया, लेकिन यह हमेशा 0

TextView में मौजूद पाठ की ऊंचाई प्राप्त करने के लिए वैसे भी है?

+1

जब तक आप इसे प्रस्तुत नहीं कर लेते हैं, तब तक आप दृश्य की ऊंचाई नहीं प्राप्त कर सकते हैं, यही कारण है कि यदि आप पाठ सेट करने के बाद ऊंचाई की जांच कर रहे हैं तो आपको हमेशा 0 वापस आते हैं। आपको ऊंचाई जानने की आवश्यकता क्यों है? आप जो हासिल करने की कोशिश कर रहे हैं उसके बारे में अधिक जानकारी दें। –

+0

असल में मुझे एक ऐसा एप्लिकेशन विकसित करना है जो पृष्ठ के साथ-साथ छवियों (जैसे एक ईबुक रीडर) पृष्ठ को प्रदर्शित करता है (मेरा मतलब है कि इसमें कोई स्क्रोलबार नहीं होना चाहिए) .. इसलिए, जब मेरे पास टेक्स्ट का एक बड़ा हिस्सा रखा जाए, मुझे यह जानने की जरूरत है कि स्क्रीन में पाठ कितना खर्च कर रहा है ताकि यह स्क्रीन में फिट हो .. –

उत्तर

6

जॉन के रूप में कहा, आप setText के तुरंत बाद ऊंचाई प्राप्त करने में सक्षम नहीं होगा। मुझे यकीन नहीं है कि टेक्स्टव्यू पर getHeight() का उपयोग करके आप बहुत मदद करेंगे। दृश्य की दृश्य न केवल दृश्य में दृश्यमान पाठ की ऊंचाई पर निर्भर है, बल्कि व्यूग्रुप/लेआउट पर भी टेक्स्ट व्यू रहता है। यदि व्यूग्रुप ऊंचाई को अधिकतम करने के लिए टेक्स्ट व्यू को बताता है, तो GetHeight() आपको कहीं भी नहीं ले जाएगा यदि पाठ पाठ के बाद तक आप प्रतीक्षा करते हैं।

मैं तरीके का एक संख्या है कि यह किया जा सकता है देखते हैं:

  1. उपवर्ग TextView और onSizeChanged विधि के ऊपर लिख। वहां, साइज चेंज पर सुपरर्स को कॉल करें, फिर getLineCount() द्वारा टेक्स्ट व्यू के भीतर लाइनों की संख्या और getLineHeight() के साथ प्रति पंक्ति ऊंचाई प्राप्त करें। यह आपके लेआउट या व्हाट्नॉट के आधार पर getHeight() का उपयोग करने से बेहतर हो सकता है या नहीं।
  2. टेक्स्टव्यू आयामों का उपयोग न करें। TextView.getPaint() के साथ टेक्स्ट व्यू पेंट प्राप्त करें, और फिर

    रेक्ट सीमाओं से चौड़ाई और ऊंचाई की गणना करें; paint.getTextBounds (टेक्स्ट, 0, टेक्स्ट। लम्बाई(), सीमाएं);

अब आपके पास सीमाओं में आयाम होंगे। अब आप पेंट.ब्रेकटेक्स्ट के साथ काम कर सकते हैं यह देखने के लिए कि आप एक पंक्ति पर कितना टेक्स्ट फिट करेंगे। शायद टेक्स्टव्यू द्वारा उपयोग किए जाने वाले समान तर्क होने के लिए शायद बहुत अधिक परेशानी और गारंटी नहीं है (मेरी अनियंत्रित आंखों के लिए)।

+0

क्र्रेड ..क्या आप टेक्स्टव्यू को उप-वर्गीकृत करने के लिए कुछ उदाहरण दे सकते हैं ताकि मुख्य वर्ग में टेक्स्टव्यू ऑब्जेक्ट का उपयोग उप-वर्ग –

+0

में किया जा सके, ठीक है, आपके पास सार्वजनिक वर्ग MyText टेक्स्टव्यू {ओवरराइड मीथोड्स} बढ़ाता है और मुख्य श्रेणी में आप " MyText textView = नया MyText (यह); " "टेक्स्ट व्यू टेक्स्ट व्यू = नया टेक्स्ट व्यू (यह);" के बजाय। यदि आप इसके बजाय एक्सएमएल लेआउट का उपयोग करना चाहते हैं, तो मैं http://developer.android.com/guide/topics/ui/custom-components.html पढ़ने के लिए अनुशंसा करता हूं (वास्तव में जावा में सामान बनाने के लिए भी इसे पढ़ें)। –

+0

Thnks .. लेकिन onizeChanged विधि अंत में बुलाया जा रहा है !! तो getLineCount एप्लिकेशन के बीच में उपयोग नहीं किया जा सकता है! मेरा मतलब है .. अगर मैं textview.getLineCount() के साथ एक वैरिएबल प्रारंभ करना चाहता हूं, तो टेक्स्ट –

13

क्योंकि यह आकार लेआउट समाप्त होने के बाद ही जाना जाता है, एक तरीका कस्टम टेक्स्ट व्यू बनाना और साइज चेंज विधि पर उपयोग करना है। एक अन्य तरीका यह है:

final TextView tv = (TextView) findViewById(R.id.myTextView); 
    ViewTreeObserver vto = tv.getViewTreeObserver(); 
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      Toast.makeText(MyActivity.this, tv.getWidth() + " x " + tv.getHeight(), Toast.LENGTH_LONG).show(); 
      tv.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
     } 
    }); 

इस कोड मैं यहाँ मिल गया है: How to retrieve the dimensions of a view?

+0

मुझे लगता है कि मैं इससे कुछ उपयोगी प्राप्त कर सकता हूं .. thnq .. –

+0

उपरोक्त कोड के साथ प्रबलता है .. ऊंचाई टेक्स्टव्यू केवल कोड के अंत में हासिल किया जा सकता है .. मैं इसे बीच में प्राप्त करने में असमर्थ हूं !! मैंने ऊंचाई को स्टोर करने के लिए एक चर लिया और tv.getHeight() पर globalLayout() में परिवर्तनीय प्रारंभ किया .. लेकिन विविधता का मान हमेशा तक 0 तक रहता है .. अंत में यह पाठ की ऊंचाई में बदल जाता है ... –

+0

यह काम कर रहा है .. धन्यवाद @ लुमिस – John

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