Поля набора в LinearLayout программно

Я пытаюсь использовать Java (не XML) для создания LinearLayout с кнопками, которые заполняют экран и имеют поля. Вот код, который работает без полей:

LinearLayout buttonsView = new LinearLayout(this);
buttonsView.setOrientation(LinearLayout.VERTICAL);
for (int r = 0; r < 6; ++r) {
    Button btn = new Button(this);
    btn.setText("A");

    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT); // Verbose!
    lp.weight = 1.0f; // This is critical. Doesn't work without it.
    buttonsView.addView(btn, lp);
}

ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT);
setContentView(buttonsView, lp);

Таким образом, это хорошо работает, но как же Вы даете поля кнопок, таким образом, существует пространство между ними? Я пытался использовать LinearLayout.MarginLayoutParams, но это имеет нет weight участник, таким образом, это бесполезно. И это не работает при передаче его lp в его конструкторе также.

Действительно ли это невозможно? Поскольку это верные взгляды это, и это не была бы первая задача расположения Android, можно только сделать в XML.

260
задан Ziem 10 January 2016 в 08:09
поделиться

2 ответа

Вот небольшой код для этого:

LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);

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

layoutParams.setMargins(30, 20, 30, 0);

Button okButton=new Button(this);
okButton.setText("some text");
ll.addView(okButton, layoutParams);
488
ответ дан 23 November 2019 в 02:36
поделиться

Так что это прекрасно работает, но как на земле Вы даете кнопкам поля, чтобы между ними есть пространство?

Вы называете setMargins() в объекте LinearLayout.LayoutParams.

Я попробовал использовать LinearLayout.MarginLayoutПарамы, но который не имеет весового элемента, поэтому это не хороший.

LinearLayout.LayoutParams является подклассом LinearLayout.MarginLayoutParams, как указано в документации.

Не ли это невозможно?

Нет.

это был бы не первый Android. Задача макета, которую вы можете выполнить только в XML

Вы можете предоставить доказательство этого утверждения.

Лично я не знаю ничего, что может быть достигнуто только с помощью XML, а не с помощью методов Java в SDK. Фактически, по определению, все должно быть выполнимо через Java (хотя и не обязательно с помощью методов, доступных для SDK), поскольку XML не является исполняемым кодом. Но, если вы знаете о чем-то, укажите на это, потому что это ошибка в SDK, которая должна быть исправлена когда-нибудь.

63
ответ дан 23 November 2019 в 02:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: