प्रोग्रामवेट के लेआउट वेट को प्रोग्रामेटिक रूप से सेट करें


214

मैं TableRowवस्तुओं को गतिशील रूप से बनाने और उन्हें एक में जोड़ने की कोशिश कर रहा हूं TableLayoutTableRowवस्तुओं 2 आइटम, एक है TextViewऔर एक CheckBoxTextViewआइटम पुश करने के लिए 1 के लिए अपने लेआउट वजन सेट की आवश्यकता है CheckBoxअब तक सही करने के लिए आइटम नहीं है।

मैं किसी TextViewआइटम के लेआउट भार को प्रोग्रामेटिक रूप से सेट करने के बारे में प्रलेखन नहीं ढूँढ सकता ।

जवाबों:


355

आपको TableLayout.LayoutParamsकुछ इस तरह से उपयोग करना होगा:

TextView tv = new TextView(v.getContext());
tv.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1f));

अंतिम पैरामीटर वजन है।


15
मैंने पहले इसका उल्लेख नहीं किया, इसलिए मुझे खेद है। लेकिन मैंने अपना सवाल पूछने से पहले यह कोशिश की। यह TextView को लेआउट से गायब कर देता है। लेकिन, एक सकारात्मक टिप्पणी पर, मैंने पाया कि TableLayout की stretch_columns प्रॉपर्टी को 0 पर सेट करने के कारण मुझे जो प्रभाव दिख रहा है, वह है (TextView बाईं ओर, दाईं ओर CheckBoxes)। सहायता के लिए धन्यवाद।
यूजीन

8
यदि आप XML लेआउट आयात कर रहे हैं और आप अपने लेआउट को गतिशील रूप से नहीं बना रहे हैं, तो आप इसे इस तरह से पकड़ सकते हैं:TextView tv = (TextView) findViewById(R.id.your_textview_inside_the_linearlayout); tv.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 0.1f));
एरिक लेसचिंस्की

5
प्रोग्रामेटिक रूप से लेआउट वेट सेट करने के लिए, TableRow.LayoutParamsइसके बजाय उपयोग किया जाना चाहिए TableLayout.LayoutParams। देखिए @ दोरजे का जवाब।
हलील

import android.widget.LinearLayout; आयात android.widget.TableLayout;
प्रकाश

1
ध्यान दें कि अधिकांश लोग पहले या दूसरे पैरामीटर के रूप में 0 का उपयोग करेंगे (यदि क्षैतिज या ऊर्ध्वाधर के आधार पर) और न ही WRAP_CONTENT क्योंकि वे जो देख रहे हैं वह वजन सेट करना है।
फ्लोरियनबी

97

इसका उत्तर है कि आपको TableRow.LayoutParams का उपयोग करना है, न कि LinearLayout.LayoutParams या किसी अन्य LayoutParams का।

TextView tv = new TextView(v.getContext());
LayoutParams params = new TableRow.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1f);
tv.setLayoutParams(params);

अलग-अलग लेआउटपार्म्स विनिमेय नहीं हैं और यदि आप गलत का उपयोग करते हैं तो ऐसा कुछ भी नहीं होता है। पाठ दृश्य का जनक एक तालिका पंक्ति है, इसलिए:

http://developer.android.com/reference/android/widget/TableRow.LayoutParams.html


इस जवाब ने मुझे बहुत मदद की ...
टेबललाइट

अरे यार, तुमने मुझे इतना समय बचा लिया। यह कहाँ निर्दिष्ट है? मैंने प्रलेखन में कुछ भी नहीं पाया कि आप इंटरचेंज नहीं कर सकते हैंLayoutParams
एड्रिन कैडेट

TableRow.LayoutParamsमेरे लिए भी काम किया
Menelaos Kotsollaris

6
इस उत्तर का मुख्य भाग 0
लियोन

यह मेरे काम के समय को कम कर देगा। मैं इसे लंबे समय से खोज रहा हूं। बहुत बढ़िया समाधान
SIVAKUMAR.J

38

पहले के उत्तर में वजन को एक नए SomeLayoutType.LayoutParams ऑब्जेक्ट के कंस्ट्रक्टर को पास किया जाता है। अभी भी कई मामलों में यह मौजूदा वस्तुओं का उपयोग करने के लिए अधिक सुविधाजनक है - यह उन मापदंडों से निपटने में मदद करता है जिनमें हम रुचि नहीं रखते हैं।

एक उदाहरण:

// Get our View (TextView or anything) object:
View v = findViewById(R.id.our_view); 

// Get params:
LinearLayout.LayoutParams loparams = (LinearLayout.LayoutParams) v.getLayoutParams();

// Set only target params:
loparams.height = 0;
loparams.weight = 1;
v.setLayoutParams(loparams);

loparams NULL हो सकता है इसलिए आप यह सुनिश्चित कर लें कि
setLayoutParams

@ एएजीए, एक व्यावहारिक स्थिति में नहीं। अगर यह चौड़ाई और ऊंचाई सेट नहीं था, तो दृश्य बढ़ेगा नहीं। लेकिन मैं मानता हूं - यह जांचने के लिए एक अच्छा अभ्यास है कि कब अशक्त होने के बारे में संदेह है।
सबरेज़िन

16
TextView txtview = new TextView(v.getContext());
LayoutParams params = new LinearLayout.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1f);
txtview.setLayoutParams(params);

1f वजन = 1 के रूप में दर्शाता है; आप 2f या 3f दे सकते हैं, दृश्य अंतरिक्ष में बढ़ते जाएंगे


12

बस लेआउट में लेआउट लेआउट सेट करें

परम चर बनाएँ

 android.widget.LinearLayout.LayoutParams params = new android.widget.LinearLayout.LayoutParams(
            LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 1f);

1f वजन चर है

अपना विजेट या लेआउट सेट करें

 TextView text = (TextView) findViewById(R.id.text);
 text.setLayoutParams(params);

आपको यह जानकारी कहां से मिलती है कि 1f का मतलब वजन चर है? क्या आप कृपया एक लिंक प्रदान कर सकते हैं?
ह्योनज

@hayonj सिर्फ LinearLayout.LayoutParamsकंस्ट्रक्टर के स्रोतों की जाँच करें । तीसरा पैरामीटर वजन है। या दस्तावेज़ीकरण
mente

11
TextView text = new TextView(v.getContext());
text.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, 
                                                LayoutParams.WRAP_CONTENT, 1f));

(या)

TextView tv = new TextView(v.getContext());
LayoutParams params = new TableRow.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1f);
tv.setLayoutParams(params);

1f को वजन = 1 के रूप में संदर्भित किया जाता है; अपनी आवश्यकता के अनुसार आप 2f या 3f दे सकते हैं, दृश्य अंतरिक्ष में बढ़ते जाएंगे। रैखिक लेआउट में विचारों के बीच निर्दिष्ट दूरी बनाने के लिए " रैखिकलेयूट " के लिए भार का उपयोग करें ।

LinearLayout ll_Outer= (LinearLayout ) view.findViewById(R.id.linearview);
LinearLayout llInner = new LinearLayout(this);
            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FillParent, LinearLayout.LayoutParams.WrapContent);
            llInner.Orientation = Orientation.Horizontal;
            llInner.WeightSum = 2;
            ll_Outer.AddView(llInner);


7

आप अलग से वजन भी दे सकते हैं,

LayoutParams lp1 = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);

 lp1.weight=1;

6

मेरे लिए यह काम है, और मुझे आशा है कि यह आपके लिए भी काम करेगा

पहले पेरेंट व्यू के लिए लेआउटपार्म्स सेट करें:

myTableLayout.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.FILL_PARENT,
                TableLayout.LayoutParams.FILL_PARENT));

फिर TextView (बच्चे) के लिए सेट करें:

 TableLayout.LayoutParams textViewParam = new TableLayout.LayoutParams
     (TableLayout.LayoutParams.WRAP_CONTENT,
     TableLayout.LayoutParams.WRAP_CONTENT,1f);
     //-- set components margins
     textViewParam.setMargins(5, 0, 5,0);
     myTextView.setLayoutParams(textViewParam); 

1

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

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

1

4 घंटे तक संघर्ष करने के बाद। अंत में, इस कोड ने मेरे लिए काम किया।

3 कॉलम एक पंक्ति में हैं।

  TextView serialno = new TextView(UsersActivity.this);
  TextView userId = new TextView(UsersActivity.this);
  TextView name = new TextView(UsersActivity.this);

  serialno.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1f));
  userId.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1f));
  name.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1f));

-1

मुझे इस समाधान के साथ कुछ हद तक कठिनाई का सामना करना पड़ा था: एक TableRow में दो बटन रखने की कोशिश की जा रही थी, जिसमें से प्रत्येक में आधी स्क्रीन चौड़ाई थी। जो भी कारण के लिए, बाएं बटन हमेशा चौड़ाई का लगभग 70% होगा, और दायां बटन 30%। कॉलिंग table_layout.setStretchAllColumns (सत्य) का कोई प्रभाव नहीं था, और न ही बटन की चौड़ाई को आधी स्क्रीन पर सेट किया गया था, और न ही उनके लेआउट का वजन निर्धारित किया गया था।

समाधान मैं TableRows, जिसमें एक LinearLayout घोंसला बनाने से किया गया था के साथ समाप्त हो गया था कि खाते में बटन 'चौड़ाई के मान लेते हैं।

    TableLayout layout = new TableLayout(this);
    TableRow top_row = new TableRow(this);
    left_button = styleButton();
    right_button = styleButton();
    LinearLayout toprow_layout = new LinearLayout (this);
    toprow_layout.setOrientation(LinearLayout.HORIZONTAL);
    toprow_layout.addView (left_button);
    toprow_layout.addView(right_button);
    toprow.addView(top_layout);
    layout.addView(top_row)

    private Button styleButton() {
            Button btn = new Button (this);
            android.view.Display display = ((android.view.WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();      
            btn.setWidth((int)(display.getWidth()/2));    // set width to half
            btn.setHeight(((int)display.getHeight()/6));  // set height to whatevs
            btn.setText("foo");
            return btn;
        }

1
बस आप भविष्य के लिए जानते हैं, समाधान सभी के लिए TableRow, Button1, और Button2 layout_width=fill_parentसेट करना है और ऐसा करने के बाद , Button1 और Button2 layout_weight=1दोनों के लिए सेट करें । फिलर_परेंट और लेआउट_वेट = 1 वाले सभी तत्वों को मुद्रास्फीति के बराबर आकार दिया जाएगा।
18 मई को edthethird
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.