Android TableLayout में "colspan" के बराबर क्या है?


132

मैं Android में एक TableLayout का उपयोग कर रहा हूं। अभी मेरे पास इसमें दो आइटम के साथ एक TableRow है, और उसके नीचे, एक TableRow के साथ एक आइटम है। यह इस तरह प्रस्तुत करता है:

-----------------------------
|   Cell 1    |  Cell 2     |
-----------------------------
|   Cell 3    |
---------------

मैं जो करना चाहता हूं, वह दोनों ऊपरी कोशिकाओं में सेल 3 खिंचाव है, इसलिए यह इस तरह दिखता है:

-----------------------------
|   Cell 1    |  Cell 2     |
-----------------------------
|           Cell 3          |
-----------------------------

HTML में मैं एक COLSPAN का उपयोग करूँगा .... मैं Android में यह काम कैसे करूँगा?


इम्हो, मैं ऐसा करने का बेहतर तरीका हूं। यहाँ जवाब: stackoverflow.com/a/18682293/1979882
व्याचेस्लाव

1
रिकॉर्ड के लिए, ध्यान दें कि एक TableLayout अनिवार्य रूप से एक LinearLayout है। इसका मतलब है कि आप किसी भी बच्चे को सीधे जोड़ सकते हैं। तो एक एकल ऑल-कॉलम-स्पैन दृश्य के लिए, आप TableRow को छोड़ सकते हैं।
ralfoide

जवाबों:


196

ऐसा लगता है कि वहाँ एक विशेषता है कि: layout_span

अद्यतन: यह विशेषता TableRow के बच्चों के लिए लागू की जानी चाहिए। खुद TableRow को नहीं।


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

2
आप जानते हैं, उत्तर में आपके अपडेट के लिए +1। मैं यह पता लगाने की कोशिश कर रहा था कि एक्लिप्स Ctrl + स्पेस पर वह विकल्प क्यों नहीं दे रहा है! : D;)
नीरव झवेरी

मैं अपने विचार पर layout_span का उपयोग करता हूं। तब मैं उस दृश्य पर वजन का उपयोग नहीं कर सकता। मुझे wra_content का उपयोग करना है। क्यों?
14

93

बस उत्तर को पूरा करने के लिए, लेआउट_स्पैन विशेषता को बच्चे में जोड़ा जाना चाहिए, टेबलरॉव पर नहीं।

यह स्निपेट मेरे टेबललैटआउट की तीसरी पंक्ति को दर्शाता है, जो 2 कॉलम के लिए फैला हुआ है।

<TableLayout>
    <TableRow
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_span="2"
            android:text="@string/create" />
    </TableRow>
</TableLayout>

36

और यह है कि आप इसे प्रोग्रामेटिक रूप से कैसे करते हैं

//theChild in this case is the child of TableRow
TableRow.LayoutParams params = (TableRow.LayoutParams) theChild.getLayoutParams();
params.span = 2; //amount of columns you will span
theChild.setLayoutParams(params);

7
पंक्तिबद्ध सामग्री को भरने के लिए आपको params.weight = 1 सेट करने की आवश्यकता हो सकती है।
rmirabelle

1
यह काम नहीं करता है। stackoverflow.com/a/18682293/1979882 यहाँ मैंने स्पष्टीकरण लिखा है।
व्याचेस्लाव

7
पहले बच्चे को पंक्ति में जोड़ना सुनिश्चित करें।
अर्टेम कलिनचुक

1
@DacSaunders उत्तर को वापस ले लिया गया। आपका संपादन आपकी आवश्यकता के लिए विशिष्ट था। मूल उत्तर विधि के लिए सामान्य है और 31 अंगूठे ऊपर आपको बता सकते हैं कि आप कुछ गलत कर रहे हैं? आर्टेम की टिप्पणी देखें कि पहले बच्चे को हाइलाइट करने की आवश्यकता है। childइस मामले में कुछ भी हो सकता है, अपने संपादित सुझाव न सिर्फ TextView के रूप में। धन्यवाद
Onimusha

27

आपको पूरी पंक्ति को भरने के लिए लेआउट_वेट का उपयोग करना होगा अन्यथा यह अभी भी टेबल लेआउट के बाएं या दाएं कॉलम को भरता है।

<TableRow
  android:id="@+id/tableRow1"
  android:layout_width="match_parent"
  android:layout_height="wrap_content">

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_span="2"
            android:layout_weight="1"
            android:text="ClickMe" />

    </TableRow>

3
धन्यवाद। यह छोटे या लचीले तत्वों के लिए गुम सूचना थी, मेरे मामले में एक स्पिनर।
चक्षुर

5

शायद यह किसी की मदद करेगा। मैंने समाधान की कोशिश की layout_spanलेकिन यह मेरे लिए काम नहीं कर रहा है। इसलिए मैंने इस ट्रिक से समस्या हल की। बस उस LinearLayoutजगह का उपयोग करें TableRowजहाँ आपको कोलस्पैन की आवश्यकता है, बस ।


1
और यह LinearLayout होने की जरूरत नहीं है। मैंने सिर्फ एक दृश्य रखा, जैसा मैं चाहता था।
JPMagalhaes

3

Android का उपयोग करें: TableRow तत्व के बच्चे तत्व में layout_span


1

मुझे कोड के साथ जनरेट किए गए TableRow, Textview और इसी तरह के मामले में कुछ समस्या है। भले ही ओनिमुश का जवाब अच्छा लगता हो, यह उत्पन्न यूआई के साथ काम नहीं करता है।

यहाँ एक कोड है जो काम नहीं करता है ....

            TableRow the_ligne_unidade = new TableRow(this);
            the_ligne_unidade.setBackgroundColor(the_grey);

            TextView my_unidade = new TextView(this);
            my_unidade.setText(tsap_unidade_nom);
            my_unidade.setTextSize(20);
            my_unidade.setTypeface(null, Typeface.BOLD);
            my_unidade.setVisibility(View.VISIBLE);

            TableRow.LayoutParams the_param;
            the_param = (TableRow.LayoutParams)my_unidade.getLayoutParams();
            the_param.span = 3;
            my_unidade.setLayoutParams(the_param);

            // Put the TextView in the TableRow
            the_ligne_unidade.addView(my_unidade);

कोड ठीक प्रतीत होता है लेकिन, जब आप "the_params" की पहुंच तक पहुँचते हैं तो यह NULL देता है।

दूसरे छोर पर, यह कोड एक आकर्षण की तरह काम करता है:

            TableRow the_ligne_unidade = new TableRow(this);
            the_ligne_unidade.setBackgroundColor(the_grey);

            TextView my_unidade = new TextView(this);
            my_unidade.setText(tsap_unidade_nom);
            my_unidade.setTextSize(20);
            my_unidade.setTypeface(null, Typeface.BOLD);
            my_unidade.setVisibility(View.VISIBLE);

            // Put the TextView in the TableRow
            the_ligne_unidade.addView(my_unidade);

            // And now, we change the SPAN
            TableRow.LayoutParams the_param;
            the_param = (TableRow.LayoutParams)my_unidade.getLayoutParams();
            the_param.span = 3;
            my_unidade.setLayoutParams(the_param);

फर्क सिर्फ इतना है कि मैं स्पैन सेट करने से पहले टैक्स्टव्यू को TableRow के अंदर धकेल देता हूं। और इस मामले में, यह काम करता है। आशा है कि यह किसी की मदद करेगा!


0

मुझे लगता है कि आपको एक और एक के आसपास एक लेआउट लपेटने की आवश्यकता है। एक लेआउट सूची को लंबवत रूप से रखें, अंदर एक और एक (या इस मामले में, दो) क्षैतिज रूप से सूची है।

मैं अभी भी Android में 50-50 भाग के लिए अच्छी तरह से इंटरफ़ेस को विभाजित करना मुश्किल पा रहा हूं।


मैंने एक अलग टेबल-संबंधित बग के बारे में जानने के लिए ऐसा किया जो मेरे लेआउट का 1/3 परिदृश्य मोड में छिपा हुआ था, अज्ञात कारणों से।
स्पाइक विलियम्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.