我用按钮做了一个数组,我想把它们放在一个矩形的形式,如下所示:
[] [] []
[] [] [] (xNum为3,yNum为2)
RelativeLayout gameLayout = (RelativeLayout) findViewById(R.id.gameLayout);
x = xScreen/xNum - 20;
y = yScreen/yNum - 20;
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams
(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
int id = getResources().getIdentifier("buttons_w2", "drawable", getPackageName());
ImageView gameLogo = new ImageView(this);
RelativeLayout.LayoutParams imagelp = new RelativeLayout.LayoutParams
(RelativeLayout.LayoutParams.WRAP_CONTENT, 70);
gameLogo.setLayoutParams(imagelp);
gameLogo.setImageResource(id);
gameLayout.addView(gameLogo);
for (int i = 0; i < xNum; i++)
{
for (int j = 0; j < yNum; j++)
{
array[i][j] = new Button(this);
array[i][j].setWidth(x);
array[i][j].setHeight(y);
array[i][j].setId(createId(i, j));
if (i == 0) {
}
else {
lp.addRule(RelativeLayout.RIGHT_OF, array[i - 1][j].getId());
}
if (j == 0) {
lp.addRule(RelativeLayout.BELOW, gameLogo.getId());
}
else {
lp.addRule(RelativeLayout.BELOW, array[i][j - 1].getId());
}
array[i][j].setLayoutParams(lp);
gameLayout.addView(array[i][j]);
}
}
注意:gameLogo是位于屏幕顶部的ImageView。此外,x和y是通过使用屏幕尺寸减去一点然后除以相应行/列中的按钮数而生成的宽度和高度。
这是createId方法:
public int createId (int i, int j)
{
if (String.valueOf(i).length() == 1 && String.valueOf(j).length() == 1)
{
return Integer.parseInt("0" + i + "0" + j);
}
else if (String.valueOf(i).length() == 1)
{
return Integer.parseInt("0" + i + j);
}
else if (String.valueOf(j).length() == 1)
{
return Integer.parseInt(i + "0" + j);
}
else
{
return Integer.parseInt(i + "" + j);
}
}
我试过它,xNum为1,yNum为2.基本上,我得到了gameLogo,然后是gameLogo上面的Buttons(所以你只能看到一个按钮)。为什么我的代码不起作用?
答案 0 :(得分:0)
您的imageview实际上没有ID。 尝试在创建按钮之前进行设置。
此外,您应该将AlignParentLeft设置为带有i == 0的按钮,以使它们正确对齐,为每行中第一个按钮的右边的其他按钮留出空间。
更新1 :(由于我暂时没有计算机,我无法验证它是否有效)
您正在重复使用foreach视图中的一个布局参数实例。在for循环中创建一个foreach按钮实例。
另外,将addView中的参数作为第二个参数传递。
此外,尽管在布局参数中设置了WRAP_CONTENT,但仍然明确地设置了宽度和高度。在创建参数时设置宽度和高度。
更新2
我现在查看了整个代码并确定了一些要点。
请参阅此更新代码,该代码实际上适用于我的设备。
<img src="../../image.jpg" />
一些评论:
indexToTop =(j - 1)* xNum;