0

我已经阅读了文档,查看了一些示例代码。我仍然不明白如何正确使用 GridLayouts。我特别怀疑我不了解Android规格。

我现在想做的就是将 2 个按钮放在 GridLayout 的 1 行中。我怎样才能做到这一点?

这就是我所拥有的:首先我创建了规格。
//6 rows is the goal of this View
Spec rowSpec1 = GridLayout.InvokeSpec(0, 5, GridLayout.Center);
Spec colSpec1 = GridLayout.InvokeSpec(0);
Spec colSpec1 = GridLayout.InvokeSpec(0)
创建要添加的按钮:
Button bt1 = new Button(this._Context); Button bt2 = new Button(this._Context); //the this keyword is just referring to my class that extends GridLayout //Where I've stored the Activity's Context
现在让我们将按钮添加到网格中:
this.AddView(bt1, new GridLayout.LayoutParams(rowSpec1, colSpec1)); this.AddView(bt2, new GridLayout.LayoutParams(rowSpec1, colSpec2));

这样做的结果是我的 Android 设备左上角的一个按钮。如何以编程方式将这些按钮插入所需的位置?另外,我读到 Specs 实际上只是用于对齐目的,但我看到的代码看起来像是用于子视图的行和列放置;这就是我正在做的。有人可以以一种愚蠢的方式为我解释 Android 规格吗?多谢你们!

4

1 回答 1

2

colSpec1 变量已经定义了两次,但我认为这是一个错字。

假设你的意思是:

Spec rowSpec1 = GridLayout.InvokeSpec(0, 5, GridLayout.Center);
Spec colSpec1 = GridLayout.InvokeSpec(0);
Spec colSpec2 = GridLayout.InvokeSpec(0);

rowSpec1 变量从第 0 行开始,跨越 5 行。两个列规范都从第 0 列和第 1 列开始。放置按钮时,行和列完全匹配,因此按钮会堆叠在一起。

将 GridLayout 规范视为 GridLayout 单元格的一维。您需要拥有单元格的两个维度才能在其中显示视图。在 GridLayout 中放置项目时,您必须小心单元格不要重叠,除非您希望它们重叠。

考虑到这一点,您可能会有更好的运气:

Spec rowSpec1 = GridLayout.InvokeSpec(0, GridLayout.Center);
Spec rowSpec2 = GridLayout.InvokeSpec(1, GridLayout.Center);
Spec colSpec1 = GridLayout.InvokeSpec(0);
Spec colSpec2 = GridLayout.InvokeSpec(0);

由于您似乎不需要跨行,因此您可以定义大小为 1 的 rowSpec 变量。

然后你应该能够添加视图,

this.AddView(bt1, new GridLayout.LayoutParams(rowSpec1, colSpec1));
this.AddView(bt2, new GridLayout.LayoutParams(rowSpec2, colSpec2));
于 2014-02-25T00:18:07.000 回答