Распределите группу кнопок равномерно в макете Android
У меня 12 кнопок, и они должны быть равномерно распределены по горизонтальной и вертикальной оси макета. Я не могу использовать GridLayout
, Вот как это должно выглядеть:
Кроме того, я не хочу получать сообщения о проблемах производительности из-за неправильного использования weight
имущество. Прямо сейчас я пытаюсь сделать это с RelativeLayout
, устанавливая положение каждой кнопки по отношению к другим, но, возможно, есть более простой / легкий / более рекомендуемый способ.
ОБНОВИТЬ
Итак, я решил использовать GridView
и это мой код прямо сейчас:
<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/menuGrid"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnWidth="32dp"
android:numColumns="3"
android:verticalSpacing="5dp"
android:horizontalSpacing="5dp"
android:stretchMode="spacingWidthUniform"
android:gravity="fill" />
Мой класс адаптера это:
public class GridAdapter extends BaseAdapter {
// Different methods ...
// Images for the buttons
private Integer[] mThumbIds = {
R.drawable.btn_1, R.drawable.btn_2, R.drawable.btn_3,
R.drawable.btn_4, R.drawable.btn_5, R.drawable.btn_6,
R.drawable.btn_7, R.drawable.btn_8, R.drawable.btn_9,
R.drawable.btn_10, R.drawable.btn_11, R.drawable.btn_12
};
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageButton imageButton;
if (convertView == null) {
imageButton = new ImageButton(mContext);
imageButton.setLayoutParams(new GridView.LayoutParams(48, 48));
imageButton.setScaleType(ImageButton.ScaleType.CENTER_CROP);
} else {
imageButton = (ImageButton) convertView;
}
imageButton.setImageResource(mThumbIds[position]);
return imageButton;
}
}
В своей основной деятельности я настраиваю адаптер следующим образом (они расположены по центру и не занимают все пространство):
GridView gridview = (GridView) v.findViewById(R.id.menuGrid);
gridview.setAdapter(new GridAdapter(this));
но кнопки отображаются следующим образом (по центру и маленьким, вместо того, чтобы занимать всю область):
2 ответа
Я не могу использовать GridLayout
так что пользуйтесь GridView
>>> LINK <<<;;, доступно с API 1. Работает так же, как ListView (без заголовка нижнего колонтитула n) и с numColumns
параметр
Ты можешь попробовать:
GridLayout
, который доступен для API уровня 7 через бэкпорт из пакета поддержки Androidgridlayout-v7
проект библиотекиTableLayout
, с помощьюandroid:stretchColumns
выделить место для всех столбцов... но это будет работать, только если ячейки имеют одинаковую ширинуВложенные
LinearLayouts
а такжеandroid:layout_weight
поскольку проблемы с производительностью могут или не могут быть проблемой для вас (например, это один вид деятельности или фрагмент, а не строка вListView
)
И вы всегда можете реализовать свой собственный ViewGroup
с вашими собственными бизнес-правилами для определения размера и позиционирования ваших дочерних виджетов.
Что вы сейчас пытаетесь - RelativeLayout
- кажется, вряд ли будет работать таким образом, чтобы хорошо адаптироваться к разным размерам экрана.