Я использую простой GridLayout
к которому я добавляю кнопки динамически.
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tagGridLayout" android:background="@color/white" android:layout_width="fill_parent" android:layout_height="wrap_content" android:columnCount="3" > </GridLayout>
И я использую этот Java-код для заполнения моей сетки, которая работает нормально, за исключением того, что установленная опция Gravity ничего не делает. Я пробовал – менял layout_width на разные типы в XML-файле, добавляя гравитацию к GridLayout
и т. Д., Как упоминалось в других решениях на этом сайте. Другое дело, что я делаю это в задаче Async внутри фрагмента. В основном я хочу достичь того, что достигается в XML-формате layout_gravity="fill_horizontal"
.
tagButtons = new Button[trendingTagsCount]; for(int i=0;i<trendingTagsCount;i++) { tagButtons[i] = new Button(getActivity()); //tagButtons[i].setLayoutParams(new LayoutParams(Gravity.FILL_HORIZONTAL)); tagButtons[i].setText(getTagsList.get(i).tag); tagButtons[i].setGravity(Gravity.FILL_HORIZONTAL); tagButtonGrid.addView(tagButtons[i]); }
Поскольку Каран Мер сказал, что вы установили Гравитацию Макета с помощью GridLayout.LayoutParams.
Но будьте осторожны, в Gridlayout вам нужно установить columnSpec / rowSpec для детей (в вашем случае Button) до:
param.columnSpec = GridLayout.spec(0); param.rowSpec = GridLayout.spec(0);
И только тогда
param.setGravity(Gravity.RIGHT);
Если columnSpec / rowSpec НЕ УКАЗАНА, когда вы устанавливаетеGravity, гравитация не работает …
Даже если вы это сделаете:
param.setGravity(Gravity.RIGHT); param.columnSpec = GridLayout.spec(0); param.rowSpec = GridLayout.spec(0);
Гравитация не работает …
Правильный путь:
param.columnSpec = GridLayout.spec(0); param.rowSpec = GridLayout.spec(0); param.setGravity(Gravity.RIGHT);
Я не знаю, есть ли ошибка или преднамеренная вещь. (Я использую Android API 19)