Я пытаюсь использовать 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.
Вот небольшой код для этого:
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);
Так что это прекрасно работает, но как на земле Вы даете кнопкам поля, чтобы между ними есть пространство?
Вы называете setMargins()
в объекте LinearLayout.LayoutParams
.
Я попробовал использовать LinearLayout.MarginLayoutПарамы, но который не имеет весового элемента, поэтому это не хороший.
LinearLayout.LayoutParams
является подклассом LinearLayout.MarginLayoutParams
, как указано в документации.
Не ли это невозможно?
Нет.
это был бы не первый Android. Задача макета, которую вы можете выполнить только в XML
Вы можете предоставить доказательство этого утверждения.
Лично я не знаю ничего, что может быть достигнуто только с помощью XML, а не с помощью методов Java в SDK. Фактически, по определению, все должно быть выполнимо через Java (хотя и не обязательно с помощью методов, доступных для SDK), поскольку XML не является исполняемым кодом. Но, если вы знаете о чем-то, укажите на это, потому что это ошибка в SDK, которая должна быть исправлена когда-нибудь.