Кнопки в LinearLayout не заполняют все пространство программно - PullRequest
2 голосов
/ 28 августа 2011

Итак, у меня есть LinearLayout в горизонтальном режиме, к которому я добавляю кнопки в произвольное время в коде, и мне нравятся все они, чтобы заполнить пространство одинаково.

Это мой текущий код:

layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                                             ViewGroup.LayoutParams.WRAP_CONTENT);
layoutParams.gravity = Gravity.FILL;

и я добавляю его в мой вид здесь:

linearLayout.addView(button, layoutParams);

Все, что он делает, это добавляет кнопки, как если бы это было wrap_content, и не расширяет их ширину, чтобы заполнить доступное пространство, как на кнопках, выглядят выровненными влево.

Я также пробовал linearLayout.setGravity(Gravity.FILL_HORIZONTAL); и

linearLayout.setWeightSum(++weightSum);
linearLayout.addView(button, layoutParams);

, где layoutParams в данном случае:

layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                                             ViewGroup.LayoutParams.WRAP_CONTENT, 1);

Я также пытался установить нулевую ширину макета для ответов на другие вопросы.

Мне не хватает другой техники?

Редактировать: Я понял, я забыл установить ширину LinearLayout match_parent вместо wrap_content.

1 Ответ

3 голосов
/ 28 августа 2011
Фон

Button имеет «поля», поэтому у них всегда будут пропуски, даже если между кнопками нет пробела. Вы должны изменить фон на свое собственное изображение, у которого нет этих полей.

РЕДАКТИРОВАТЬ : Вы должны использовать веса для кнопок.

    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
            0, LayoutParams.WRAP_CONTENT);
    params.weight = 1;
    for( int i = 0; i < 5; ++i) {
        Button button = new Button(this);
        button.setText("Button" + (i + 1));
        linearLayout.addView(button, params);
    }
...