【问题标题】:Setting number of columns programmatically in TableLayout在 TableLayout 中以编程方式设置列数
【发布时间】:2011-02-13 08:56:07
【问题描述】:

我有一个 XML 布局,其中包含一个带有未知数量 TableRows 的 TableLayout... 行数将在运行时确定,但我知道的是我想要两列...... 所以我对此有几个问题:

    - 有没有办法将整个 TableLayout 设置为 2 列?

- 有没有办法以编程方式为(在运行时)创建的 TableRows 提供一个 ID,它将放置在 TableLayout 中,以便我以后可以从软件的其他部分引用它们?

【问题讨论】:

    标签: android tablelayout


    【解决方案1】:

    您可以通过 XML 部件和 LayoutInflater 构建表格行。假设你有这个作为你的 table_cell.xml:

    <TextView android:id="@+id/text"
        android:text="woot" />
    

    这就是你的 table_row.xml (除非你对你的 TableRow 做了一些花哨的事情,你可能不需要将它放在它自己的 XML 文件中,而只需以编程方式创建它。结果将是相同的):

    <TableRow />
    

    假设您的 TableLayout 引用被称为“table”,您可以执行以下操作:

    TableLayout table = (TableLayout)findViewById(R.id.table);
    LayoutInflater inflater = getLayoutInflater();
    
    for(int i = 0; i < 5; i++) {
        TableRow row = (TableRow)inflater.inflate(R.layout.table_row, table, false);
        View v = (View)inflater.inflate(R.layout.table_cell, row, false);
        row.addView(v);
        v = (View)inflater.inflate(R.layout.table_cell, row, false);
        row.addView(v);
    
        // you can store your reference to `row` here for later use
        table.addView(row);
    }
    

    使用这种技术,您仍然可以在 XML 中设置布局,使其更易于阅读/组织/编辑,并且您仍然可以通过编程方式控制表格中的列数和行数。您还可以存储对每个表行的引用以供以后使用。

    【讨论】:

    • 谢谢!我一直在尝试它,它确实检索了我的 table_cell。在我的例子中,它是一个 ImageButton,但问题是即使我添加了 layout_gravity="center" ,它也不会像我期望的那样添加它。同样的 ImageButtons 上的填充也不起作用。在我的 XML 版本中,它可以在不使用填充的情况下工作。我想每行有 2 个 ImageButtons。因为这两个加起来小于我基于 XML 的解决方案中的屏幕宽度,所以它们之间有空格。它现在所做的是将它们一个对一个放置,因此它实际上看起来像一个长按钮而不是两个
    • 所有的 padding 和 layout_gravity 都应该像往常一样工作。这样做没有区别。你确定你的东西是正确的吗?也许对 SO 的另一个问题有好处?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 2011-06-23
    • 2012-03-29
    • 1970-01-01
    • 2012-06-14
    相关资源
    最近更新 更多