问题
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