动态创建多行按钮列表

时间:2012-08-07 09:00:32

标签: android list android-layout button

我想创建一个多行按钮列表。这样的事情:
enter image description here
但我想动态地(在代码中)。有没有办法告诉布局自动执行此操作?或者我必须自己使用RelativeLayout.LayoutParams来做这件事。我可以通过代码来做到这一点,但我应该控制很多东西,我想知道是否有另一种更简单的方法来做到这一点。例如,告诉布局在当前的一行已满时添加下一行中的元素!

3 个答案:

答案 0 :(得分:1)

您也可以使用LinearLayout执行此操作,并使用重量使所有按钮的大小相同。

关于你的问题:

  

我可以通过代码执行此操作,但我应该控制很多事情而且我是   想知道是否有另一种更简单的方法来做到这一点。例如告诉   布局,以便在当前的元素已满时在下一行添加元素!

如果您测量屏幕宽度和高度并使用View类中的函数来确定特定视图及其子视图的细节,则可能会出现这种情况。

替代

但正如评论中所提到的,您可以使用其他视图来解决您的问题,例如GridView。

答案 1 :(得分:1)

您还可以使用表格布局

在xml中创建第一行tabllayout,如下所示

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >

        <Button
            android:id="@+id/goBack"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="6dp"
            android:layout_marginTop="12dp"
            />
    </LinearLayout>
<FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="fill"
        android:layout_weight="0.80">

    <HorizontalScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >


        <FrameLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="fill"
                    android:layout_weight="0.80"
                    android:background="#f0ffff" >
        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <TableLayout
                android:id="@+id/data_table"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_margin="2dp"
                android:background="#006400"
                android:orientation="vertical" >

                <TableRow
                    android:id="@+id/second"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent" >

                    <TextView
                        android:layout_width="105dp"
                        android:layout_height="fill_parent"
                        android:layout_margin="1dp"
                        android:background="@drawable/textbg"
                        android:gravity="center"
                        android:text="Number1"
                        android:textColor="#006400" >
                    </TextView>

                    <Button
                        android:layout_width="105dp"
                        android:layout_height="fill_parent"
                        android:layout_margin="1dp"
                        android:background="@drawable/textbg"
                        android:gravity="center"
                        android:text="Number2"
                        android:textColor="#006400" />

                    <TextView
                        android:layout_width="105dp"
                        android:layout_height="fill_parent"
                        android:layout_margin="1dp"
                        android:background="@drawable/textbg"
                        android:gravity="center"
                        android:paddingBottom="2dp"
                        android:paddingTop="2dp"
                        android:text="Distance"
                        android:textColor="#006400" >
                    </TextView>

                    <TextView
                        android:layout_width="105dp"
                        android:layout_height="fill_parent"
                        android:layout_margin="1dp"
                        android:gravity="center"
                        android:paddingBottom="8dp"
                        android:paddingLeft="8dp"
                        android:paddingRight="5dp"
                        android:paddingTop="8dp"
                        android:text="F/G/H/S"
                        android:textColor="#006400" >
                    </TextView>
                </TableRow>
            </TableLayout>
        </ScrollView>
        </FrameLayout>
    </HorizontalScrollView>
 </FrameLayout>
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="bottom"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="60dp"
            android:layout_marginTop="4dp"
            android:gravity="center"
            android:orientation="horizontal" >

            <Button
                android:id="@+id/savescore"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                 />
        </LinearLayout>
    </LinearLayout>

</LinearLayout>

我为四个三个文本创建了这个xml,并在一行中创建了按钮 请参阅onCreate

中的表格
TableLayout extendeedTable = (TableLayout)findViewById(R.id.data_table); 

添加

等行
while (extendeedTable.getChildCount() > 1)
        {
            // while there are at least two rows in the table widget, delete
            // the second row.

            extendeedTable.removeViewAt(1);
        }

        // collect the current row information from the database and
        // store it in a two dimensional ArrayList


        // iterate the ArrayList, create new rows each time and add them
        // to the table widget.

//此处的值是表

中所需的行数
        for (int position=0; position < value ; position++)
        {
            TableRow tableRow= new TableRow(this);

            tableRow.setBackgroundDrawable(null);
//          ArrayList<Object> row = data.get(position);


            TextView idText = new TextView(this);
            idText.setText(Integer.toString(position + 1));
            idText.setGravity(Gravity.CENTER);
            idText.setTextColor(Color.BLACK);
            idText.setWidth(10);
            idText.setHeight(45);
            idText.setBackgroundResource(R.drawable.text2);

             tableRow.addView(idText);




             textOne = new Button(this);
            textOne.setText("CLUB");
            textOne.setBackgroundResource(R.drawable.text2);
            textOne.setGravity(Gravity.CENTER);
            textOne.setTextColor(Color.BLACK);//left top right bottom


            textOne.setWidth(10);
            textOne.setHeight(45);

            textOne.setId(1+position);
            tableRow.addView(textOne);

              allbtns.add(textOne);
//          textOne.setOnClickListener(this);

             textOne.setOnClickListener(new OnClickListener() {
                public void onClick(View arg0) {
                  // do something when the button is clicked

                    final Button button = (Button) arg0;

                    System.out.println("value  of button is      "+
                            button.getId());

                    dialog1.setTitle(" SELECT CLUB ");         






             textTwo = new EditText(this);
            textTwo.setText("");
            textTwo.setBackgroundResource(R.drawable.text2);
            textTwo.setGravity(Gravity.CENTER);
            textTwo.setTextColor(Color.BLACK);
            textTwo.setWidth(10);
            textTwo.setHeight(45);
            textTwo.setInputType(InputType.TYPE_CLASS_NUMBER);
           tableRow.addView(textTwo);
            allEds1.add(textTwo);
            textTwo.setId(position +1);


            textThree = new EditText(this);
            textThree.setText("");
            textThree.setWidth(10);
            textThree.setHeight(45);
            textThree.setTextColor(Color.BLACK);
            textThree.setBackgroundResource(R.drawable.text2);
            textThree.setGravity(Gravity.CENTER);
            textThree.setInputType(InputType.TYPE_CLASS_TEXT);
            tableRow.addView(textThree);
            allEds2.add(textThree);
            textThree.setId(position +1);

            extendeedTable.addView(tableRow);

        }

为此我从这里获得了帮助

http://www.anotherandroidblog.com/2010/08/04/android-database-tutorial/7/

其xml

http://www.anotherandroidblog.com/2010/08/04/android-database-tutorial/6/

答案 2 :(得分:1)

经过一些谷歌搜索后,我终于找到了最好的方法。使用适配器和网格,它非常简洁。 谢谢你的所有答案

这是一个教程:Creating a Custom Adapter for Gridview(ButtonAdapter)