Как установить кнопку layout_gravity="fill_vertical" программно?

Я получил GridLayoutи две или более кнопки внутри, и все кнопки должны иметь одинаковую ширину. Моя проблема заключается в том, что когда кнопки имеют разный номер строки текста, marginTop кнопки тоже будут разные. Как я могу это исправить? Я хочу, чтобы все кнопки были в одинаковом положении по высоте.

Благодарю.

Я уже пытаюсь установить Gravity с FILL_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));

1 ответ

Решение

Если вы установили базовый уровень строки 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 для дальнейшего использования.

Другие вопросы по тегам