कोड के माध्यम से TextView के लिए wra_content की चौड़ाई सेट करना


92

किसी को भी मदद मुझे कैसे की चौड़ाई सेट करने के लिए कर सकते हैं TextViewकरने के लिए wrap_contentकोड के माध्यम से और एक्सएमएल से नहीं?

मैं TextViewकोड में गतिशील रूप से एक बना रहा हूँ , तो वहाँ वैसे भी wrap_contentकोड के माध्यम से इसकी चौड़ाई कैसे सेट करें ?

जवाबों:


127
TextView pf = new TextView(context);
pf.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

विभिन्न लेआउट जैसे ConstraintLayoutऔर अन्य के लिए, उनके पास अपना स्वयं का है LayoutParams, जैसे:

pf.setLayoutParams(new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 

या

parentView.addView(pf, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

8
android.view.ViewGroup$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams
फ्रांसिस्को कोरलिस मोरेल्स

ठीक है, मुख्य अंतर यह है कि पहले कोड में हम पहले से ही उस सेटिंग के साथ एक नया टेक्स्ट व्यू बना रहे हैं। दूसरे में, हम एक मौजूदा दृश्य में जोड़ रहे हैं, और हम उन मापदंडों को भी निर्धारित कर रहे हैं। कलाकारों की समस्या के लिए, मुझे लगता है कि आपको उचित वर्ग
फ्रेंको

78

उसी परिणाम को प्राप्त करने का एक और तरीका है। मामले में आपको केवल एक पैरामीटर सेट करना होगा, उदाहरण के लिए 'ऊंचाई':

TextView textView = (TextView)findViewById(R.id.text_view);
ViewGroup.LayoutParams params = textView.getLayoutParams();
params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
textView.setLayoutParams(params);

यह बहुत अच्छा काम करता है। यदि ऐसा किया जाता है तो LinearLayoutयह प्रकट नहीं होता है ll.invalidate()जो आवश्यक है। क्यों?
midiwriter

1
मुझे लगता है कि हम कभी नहीं जान पाएंगे
डेनी

49

सामग्री लपेटने के लिए परिवर्तन TextViewचौड़ाई के लिए समाधान ।

textView.getLayoutParams().width = ViewGroup.LayoutParams.WRAP_CONTENT; 
textView.requestLayout();  
// Call requestLayout() for redraw your TextView when your TextView is already drawn (laid out) (eg: you update TextView width when click a Button). 
// If your TextView is drawing you may not need requestLayout() (eg: you change TextView width inside onCreate()). However if you call it, it still working well => for easy: always use requestLayout()

// Another useful example
// textView.getLayoutParams().width = 200; // For change `TextView` width to 200 pixel

6
सरल और सही समाधान, क्योंकि यह अन्य मापदंडों को ओवरराइड नहीं करता है।
कूलमैन्ड

2
हटाने के लिए मेरे awer को चिह्नित किया गया क्योंकि यह बहुत सरल है।
फ्रैंककर्ण जूल

2
यह सबसे अच्छा उपाय है
पेड्रम शबानी

4

मैं Android जावा बेस मल्टी लाइन एडिटेक्स पोस्ट कर रहा हूं।

EditText editText = findViewById(R.id.editText);/* edittext access */

ViewGroup.LayoutParams params  =  editText.getLayoutParams(); 
params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
editText.setLayoutParams(params); /* Gives as much height for multi line*/

editText.setSingleLine(false); /* Makes it Multi line */

1

मुझे लगता है कि यह कोड आपके प्रश्न का उत्तर देता है

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) 
holder.desc1.getLayoutParams();
params.height = RelativeLayout.LayoutParams.WRAP_CONTENT;
holder.desc1.setLayoutParams(params);

0

इस पोस्ट पर थोड़ा अपडेट: यदि आप अपने एंड्रॉइड प्रोजेक्ट के भीतर ktx का उपयोग कर रहे हैं, तो थोड़ा सहायक तरीका है जो लेआउटपार्म्स को अपडेट करना बहुत आसान बनाता है।

यदि आप उदाहरण के लिए अद्यतन करना चाहते हैं तो केवल आप कोतलीन में निम्न पंक्ति के साथ कर सकते हैं।

tv.updateLayoutParams { width = WRAP_CONTENT }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.