以编程方式向TableRow添加按钮并填写屏幕

时间:2016-05-15 07:10:55

标签: android android-layout

我可以添加TableRow以及其中的一些按钮,如下图所示: enter image description here

但是我想想这样的按钮填充屏幕:

enter image description here

这是我的代码:

 <TableLayout
    android:id="@+id/Tb1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

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

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

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

</TableLayout>

Button btn1;
private TableLayout buttonTableLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    btn1 = (Button) findViewById(R.id.btn1);
    buttonTableLayout = (TableLayout) findViewById(R.id.Tb1);

    btn1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            for (int row = 0; row < buttonTableLayout.getChildCount(); ++row)
                ((TableRow) buttonTableLayout.getChildAt(row)).removeAllViews();

            LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            for (int row = 0; row < 3; row++) {
                TableRow currentTableRow = getTableRow(row);

                for (int column = 0; column < 5; column++) {
                    Button newGuessButton = (Button) inflater.inflate(R.layout.my_button, null);
                    String myName = new String(String.valueOf((row * 5) + column + 1));
                    newGuessButton.setText(myName);

                    currentTableRow.addView(newGuessButton);
                }
            }
        }
    });
}

private TableRow getTableRow(int row) {
    return (TableRow) buttonTableLayout.getChildAt(row);
}

和xml(my_button):

<Button xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/newButton" android:layout_weight="1" android:layout_width="0dp" android:layout_height="wrap_content"></Button>

请给我一些建议来解决它。

1 个答案:

答案 0 :(得分:1)

Android TableRow类实际上扩展了LinearLayout类,因此您可以在此处使用LinearLayout的所有功能。

在这种情况下,您可以使用android:layout_weight来平均拉伸这些按钮。在添加这些按钮的地方,只需添加以下代码即可。

LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT);
p.weight = 1;
button.setLayoutParams(p);

或者将这些行添加到button.xml布局文件中:

android:layout_width="0dp"
android:layout_weight="1"

Docs说:

  

同等重视儿童

     

要创建线性布局,其中每个孩子在屏幕上使用相同的空间量,请将每个视图的android:layout_height设置为"0dp"(对于垂直布局)或{{1}每个视图到android:layout_width(对于水平布局)。然后将每个视图的"0dp"设置为android:layout_weight