2013-04-15 5 views
5

पर सेट है, मैं टेक्स्टव्यू में एक टेक्स्ट जोड़ने की कोशिश कर रहा हूं जिसके लिए मैंने चौड़ाई को Wrap_content के रूप में सेट किया है। मैं इस पाठ्यदृश्य की चौड़ाई पाने की कोशिश कर रहा हूं। लेकिन यह सभी मामलों में 0 दिखा रहा है। टेक्स्ट को सेट करने के बाद मुझे टेक्स्टव्यू की चौड़ाई कैसे मिल सकती है।एंड्रॉइड में टेक्स्टव्यू की चौड़ाई कैसे प्राप्त करें जो Wrap_Content

 LinearLayout ll= new LinearLayout(this); 
     ll.setOrientation(LinearLayout.VERTICAL); 
     TextView tv = new TextView(this); 
     tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)); 
     ll.addView(tv); 
     tv.setText("Hello 1234567890-0987654321qwertyuio787888888888888888888888888888888888888888888888888"); 
     System.out.println("The width is == "+tv.getWidth());// result is 0 
     this.setContentView(ll); 

कृपया सुझाव है:

कोड के रूप में है। अग्रिम धन्यवाद।

उत्तर

1

आप इसे कब कॉल कर रहे हैं? क्या यह पहले से ही स्क्रीन पर खींचा गया है?

ऐसा लगता है कि आप getWidth() को बहुत जल्दी कॉल कर रहे हैं।

आप look at this question भी ले सकते हैं।

2

लेआउट पूरी तरह से निर्मित होने से पहले आप गतिशील आकार के साथ दृश्य की चौड़ाई नहीं प्राप्त कर सकते हैं। इसका मतलब है कि इसे क्रिएट() पर प्राप्त करने का कोई तरीका नहीं है। एक तरीका यह है कि टेक्स्टव्यू से विरासत प्राप्त करने वाली कक्षा बनाना और onSizeChanged() ओवरराइड करना होगा।

6

गतिशील चौड़ाई/ऊंचाई के साथ दृश्य लेआउट प्रक्रिया समाप्त होने के बाद ही उनका सही आकार प्राप्त होता है (http://developer.android.com/reference/android/view/View.html#Layout)।
आप अपने TextView को OnLayoutChangeListener जोड़ सकते हैं और प्राप्त कर सकते हैं यह आकार नहीं है:

tv.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { 
      public void onLayoutChange(View v, int left, int top, int right, int bottom, 
             int oldLeft, int oldTop, int oldRight, int oldBottom) { 
         final int width = right - left; 
         System.out.println("The width is == " + width);     
    }); 
+0

क्या एपीआई 8 और ऊपर के लिए इसके समकक्ष? –

+0

आप टेक्स्ट व्यू को उपclass कर सकते हैं और ऑनआउट() पर ओवरराइड कर सकते हैं। इससे super.onLayout() पर कॉल करें और TextView की चौड़ाई को सहेजें। यह किसी भी एपीआई स्तर के लिए काम करना चाहिए। – Const

+0

कक्षा को एपीआई स्तर 11 की आवश्यकता है (वर्तमान मिनट 8 है): android.view.View.OnLayoutChangeListener –

-1

आप इस का उपयोग करना चाहिए:

textView.getMeasuredWidth();

0
इस

मेरे लिए काम करता है:

RelativeLayout.LayoutParams mTextViewLayoutParams = (RelativeLayout.LayoutParams) mTextView.getLayoutParams(); 
mTextView.setText(R.string.text); 
mTextView.measure(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
int width = mShareTip.getMeasuredWidth(); 
//use the width to do what you want 
mShareTip.setLayoutParams(mShareTipLayoutParams); 
0

आप इस कोशिश कर सकते हैं: इस विधि

textView.measure(0,0); 
int width = textView.getMeasuredWidth(); 
0

हैलो उपयोग:

textview.post(new Runnable() { 
    @Override 
    public void run() { 
     int width = textview.getWidth(); 
     int height = textview.getHeight(); 
     textview.setText(String.valueOf(width +","+ height)); 
    } 

});

स्रोत: https://gist.github.com/omorandi/59e8b06a6e81d4b8364f

+0

इस कोड स्निपेट के लिए धन्यवाद, जो कुछ सीमित, तत्काल सहायता प्रदान कर सकता है। ए [उचित स्पष्टीकरण अपने दीर्घकालिक मूल्य में काफी सुधार करेगा] (// meta.stackexchange.com/q/114762/206345) _why_ दिखाकर यह समस्या का एक अच्छा समाधान है, और भविष्य के पाठकों के साथ इसे और अधिक उपयोगी बना देगा अन्य, समान प्रश्न। आपके द्वारा किए गए अनुमानों सहित कुछ स्पष्टीकरण जोड़ने के लिए कृपया अपना उत्तर संपादित करें। – Mogsdad

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