0

我想给 a 的单个单元格充气TableLayout

  • 我要放入每个单元格的信息具有固定大小
  • 我正在使用安卓 2.2
  • 该表应按以下方式填写:

像这样:

 ___ ___
| 1 | 2 |
|---+---|
| 3 | 4 |
|---+---|
| 5 ...
... and so on

我知道如何为 a 行充气,TableLayout但不知道如何处理单个单元格以进行充气。甚至可能吗?一种解决方法是使用两个彼此LinearLayouts相邻的单独。

还:

我可以动态更改列数吗?我的应用程序只能在两种设备上运行:10.1 英寸 Galaxy Tab 及其模拟器(屏幕较小)。所以在真实设备上我可能应该使用三列。我希望表格填满整个屏幕宽度,而不是粘在左侧。但我不知道如何LinearLayout解决这个问题。

4

2 回答 2

0

希望这是你问的:

我想在 Android 中为 TableLayout 的单个单元格充气。

假设您有这个布局文件,其中包含TableLayout

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

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

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

</TableLayout>

现在假设您要添加 2 个单元格,一个在第一行(第二个位置),一个在第二行的第一个位置(对角线)。你会这样做:

    TableLayout tl = (TableLayout) findViewById(R.id.tbl);
    TableRow tr1 = (TableRow) findViewById(R.id.tableRow1);
    TableRow tr2 = (TableRow) findViewById(R.id.tableRow2);
    View cell1 = new View(this); // here you could inflate a layout instead
                                    // of this simple View item
    TableRow.LayoutParams trlp1 = new TableRow.LayoutParams(200, 200);
    trlp1.column = 1; // the column count is 0 based
    cell1.setLayoutParams(trlp1);
    cell1.setBackgroundColor(Color.RED);
    tr1.addView(cell1);

    View cell2 = new View(this);
    TableRow.LayoutParams trlp2 = new TableRow.LayoutParams(200, 200);
    trlp2.column = 0;
    cell2.setLayoutParams(trlp2);
    cell2.setBackgroundColor(Color.GREEN);
    tr2.addView(cell2);

我可以动态更改列数吗?

单元格数最多的行的TableLayout结果中的列数(如果一行有 2 个单元格,另一行有 12 个单元格,则TableLayout包含这两行的 a 将有 12 列)。要增加或减少列数,您只需从具有最多单元格的行中添加或删除单元格。

我希望表格填满整个屏幕宽度而不是粘在左侧

我不明白你想要什么(我希望你TableLayout的 ' 设置为FILL_PARENT)。有一个android:stretchColumns="*"(以及您可以在代码中调用的方法)将使您的列在TableLayout.

于 2012-06-19T09:16:02.090 回答
0

如果其他人有类似的问题并希望将未知数量的视图动态加载到现有布局中:

只需使用 a RelativeLayout,将第一个添加View到您想要的位置,然后将其余部分与之前添加的位置对齐。Android不会为不适合同一行的每个视图自动换行,因此您必须提前计算或尝试错误。

这是一个粗略的例子。首先是填充界面的方法的代码片段:

ArrayList<Item> listItems = item.getItems();
if( listItems != null ) {
    for( Item item: listItem ) {
        addItem( MyActivity.this, item, iCounterItemNumber );
        iCounterItemNumber++;
    }
}

这里是 addItem 方法:

private void addItem( Activity context, final Item item, int iCounterItemNumber ) {
    View vItem = LayoutInflater.from(context).inflate(R.layout.layoutinflatable_item, null);
    TextView txtvItemName = (TextView) vItem.findViewById(R.id.textView_itemName);

    txtvItemName.setText(item.getName());

    vItem.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View vItem) {
            // just to show that you can set a OnClickListener      
        }
    });

    if ( iCounterItemNumber == 0 ) {
        RelativeLayout.LayoutParams rlpItemParemeters = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        rlpItemParemeters.addRule(RelativeLayout.ALIGN_PARENT_TOP);
        rlpItemParemeters.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
        vItem.setId( 100 );
        _rlItemTable.addView( vItem, rlpItemParemeters );
    } else if ( iCounterItemNumber % 2 == 0 ) {
        RelativeLayout.LayoutParams rlpPackageParemeters = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        rlpPackageParemeters.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
        rlpPackageParemeters.addRule(RelativeLayout.BELOW, ( 100 - 2 + iCounterItemNumber ) );
        vPackage.setId( 100 + iCounterItemNumber );
        _rlShopPackagesTable.addView( vPackage, rlpPackageParemeters );
    } else {
        RelativeLayout.LayoutParams rlpPackageParemeters = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        rlpPackageParemeters.addRule(RelativeLayout.ALIGN_BOTTOM, ( 100 - 1 + iCounterItemNumber ) );
        rlpPackageParemeters.addRule(RelativeLayout.RIGHT_OF, ( 100 - 1 + iCounterItemNumber ) );
        vPackage.setId( 100 + iCounterItemNumber );
        _rlItemTable.addView( vPackage, rlpPackageParemeters );

}

我知道你可以把它缩短一点,但它应该只是一个粗略的例子。希望很清楚我在这里做了什么。不包括不同的屏幕尺寸。要么使用您添加的不同大小的视图,要么获取屏幕大小并使用不同的方法。

于 2012-06-28T09:37:09.537 回答