Programmatically adding TableRow to TableLayout not working

孤街醉人 提交于 2019-11-26 05:31:16

问题


I\'m trying to add table rows programmatically following the code here

    /* Find Tablelayout defined in main.xml */
    TableLayout tl = (TableLayout) findViewById(R.id.SaleOrderLines);
    /* Create a new row to be added. */
    TableRow tr = new TableRow(this);
    tr.setLayoutParams(new TableRow.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
    /* Create a Button to be the row-content. */
    Button b = new Button(this);
    b.setText(\"Dynamic Button\");
    b.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
    /* Add Button to row. */
    tr.addView(b);
    /* Add row to TableLayout. */
    //tr.setBackgroundResource(R.drawable.sf_gradient_03);
    tl.addView(tr, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));

But but nothing is drawn to the screen. (same as one mentioned here)

When i added tr.setBackgroundResource(R.drawable.sf_gradient_03);, the row with the background image is drawn but not the button

Here is my Layout

<!-- Sale Order Lines START -->
<LinearLayout android:id=\"@+id/SaleOrderLinesArea\" android:orientation=\"vertical\"
     android:layout_width=\"fill_parent\" android:layout_height=\"fill_parent\"
     android:padding=\"10dip\" android:background=\"@drawable/sf_gradient_11\" >
    <LinearLayout android:id=\"@+id/subHeaderArea\" android:padding=\"10dip\"
            android:layout_width=\"fill_parent\" android:layout_height=\"wrap_content\"
        >
        <TextView android:id=\"@+id/screenTitle\"
            android:layout_width=\"wrap_content\" android:layout_height=\"wrap_content\"
            android:textColor=\"@color/title_sub\" android:textStyle=\"bold\"
            android:text=\"Order Lines\" />
    </LinearLayout>
    <TableLayout android:id=\"@+id/SaleOrderLines\"
        android:layout_width=\"fill_parent\" android:layout_height=\"fill_parent\"
        android:padding=\"10dip\" android:stretchColumns=\"*\">
        <TableRow
            android:background=\"@drawable/sf_gradient_13\" android:padding=\"10dip\"
            >
            <TextView android:id=\"@+id/order_ref_label\"
                android:layout_width=\"fill_parent\" android:layout_height=\"wrap_content\"
                android:textColor=\"@color/fg_prime\" android:text=\"bLA bLA\" />
            <TextView android:id=\"@+id/product_label\"
                android:layout_width=\"wrap_content\" android:layout_height=\"wrap_content\"
                android:textStyle=\"bold\" android:textColor=\"@color/fg_title\"
                android:text=\"@string/product\" />
            <TextView android:layout_width=\"wrap_content\" android:layout_height=\"wrap_content\"
                android:textStyle=\"bold\" android:textColor=\"@color/fg_title\"
                android:text=\"@string/product_quantity\" />
        </TableRow>
        <TableRow android:background=\"@drawable/sf_gradient_03\"
            android:paddingLeft=\"10dip\" android:paddingRight=\"10dip\"
            >
            <TextView android:id=\"@+id/order_ref_label\"
                android:layout_width=\"fill_parent\" android:layout_height=\"wrap_content\"
                android:textColor=\"@color/fg_prime\" android:text=\"Fooo\" />
            <Spinner android:id=\"@+id/product_spinner\"
                android:layout_width=\"wrap_content\" android:layout_height=\"wrap_content\"
                android:prompt=\"@string/customer_prompt\">
            </Spinner>
            <EditText android:id=\"@+id/product_uom_qty\"
                android:layout_width=\"wrap_content\" android:layout_height=\"wrap_content\"
                android:singleLine=\"true\" android:fadingEdge=\"horizontal\" /> 
        </TableRow>
    </TableLayout>
    <LinearLayout android:layout_width=\"fill_parent\" android:layout_height=\"wrap_content\"
    android:paddingTop=\"5dip\" android:paddingBottom=\"5dip\">
        <Button android:id=\"@+id/add_button\" android:layout_width=\"wrap_content\"
            android:layout_height=\"wrap_content\" android:text=\"Add Lines\" />
    </LinearLayout>
</LinearLayout>
<!-- Sale Order Lines END -->

回答1:


Got it, every LayoutParams should be of android.widget.TableRow.LayoutParams except one that supplied to tl.addView(...)

/* Find Tablelayout defined in main.xml */
TableLayout tl = (TableLayout) findViewById(R.id.SaleOrderLines);
/* Create a new row to be added. */
TableRow tr = new TableRow(this);
tr.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT, TableRow.LayoutParams.WRAP_CONTENT));
/* Create a Button to be the row-content. */
Button b = new Button(this);
b.setText("Dynamic Button");
b.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT, TableRow.LayoutParams.WRAP_CONTENT));
/* Add Button to row. */
tr.addView(b);
/* Add row to TableLayout. */
//tr.setBackgroundResource(R.drawable.sf_gradient_03);
tl.addView(tr, new TableLayout.LayoutParams(TableLayout.LayoutParams.FILL_PARENT, TableLayout.LayoutParams.WRAP_CONTENT));



回答2:


Please do note that, may be your code is perfect but the classes you are using are not proper. You may have used import android.view.ViewGroup.LayoutParams , where as the correct class is available from following import statement :

import android.widget.TableRow.LayoutParams




回答3:


In my case, I changed the width from TableRow.LayoutParams.WRAP_CONTENT to TableRow.LayoutParams.MATCH_PARENT, then it works.

TableRow tableRow = new TableRow(this);
tableRow.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT));


来源:https://stackoverflow.com/questions/7279501/programmatically-adding-tablerow-to-tablelayout-not-working

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!