1

我有一个GridLayout, 和两个或更多按钮,并且所有按钮必须具有相同的宽度。我的问题是,当按钮的文本行数不同时marginTop,按钮的按钮也会不同。我怎样才能解决这个问题?我希望所有按钮都处于相同的高度位置。

谢谢。

我已经尝试设置GravityFILL_VERTICAL但不工作。

GridLayout grid_neighbor = (GridLayout) findViewById(R.id.grid_neighbors);
grid_neighbor.setColumnCount(4);
for (i = 0; i < namelist.length; ++i) {
    Button temp = new Button(this);
    temp.setText(namelist[i]);                

    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
    lp.gravity = Gravity.FILL_VERTICAL;
    temp.setLayoutParams(lp);
    //temp.setGravity(Gravity.FILL_VERTICAL);
    temp.setWidth(button_size);
    temp.setHeight(button_size);
    grid_neighbor.addView(temp);
}

这是图片:

我的照片

这现在也有效。

GridLayout grid_neighbor = (GridLayout) findViewById(R.id.grid_neighbors);
grid_neighbor.setColumnCount(4);
for (i = 0; i < namelist.length; ++i) {
    Button temp = new Button(this);
    temp.setText(namelist[i]);                

    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
    lp.addRule(RelativeLayout.ALIGN_TOP, temp.getId());
    temp.setLayoutParams(lp);
    //temp.setGravity(Gravity.FILL_VERTICAL);
    temp.setWidth(button_size);
    temp.setHeight(button_size);
    grid_neighbor.addView(temp);
}

这会奏效!谢谢。

GridLayout.Spec speccolumn = GridLayout.spec(i%4);
GridLayout.Spec specrow = GridLayout.spec(i/4, GridLayout.TOP);
grid_neighbor.addView(temp, new GridLayout.LayoutParams(specrow, speccolumn));
4

1 回答 1

0

如果您设置为 GridLayout 行的基线不能解决您的问题?因为如果网格元素中有不同数量的文本行,android 会自动尝试将文本对齐到相同的基线,而不是对齐行元素。

编辑:我认为设置 rowSpec.alignment = TOP (或http://developer.android.com/reference/android/widget/GridLayout.Alignment.html提供的对齐方式之一)更合适。请参阅http://developer.android.com/reference/android/widget/GridLayout.LayoutParams.html以获取更多参考。

于 2013-05-20T09:13:07.047 回答