基本的android GridLayout子视图放置

时间:2014-02-06 20:29:28

标签: android xamarin android-gridlayout

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

此刻我想做的就是在GridLayout的1行中放入2个按钮。我怎么能这样做?

这就是我所拥有的:首先我创建规格     //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规格吗?谢谢你们!

1 个答案:

答案 0 :(得分:1)

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));