Распределите группу кнопок равномерно в макете 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

2 ответа

Я не могу использовать GridLayout

так что пользуйтесь GridView >>> LINK <<<;;, доступно с API 1. Работает так же, как ListView (без заголовка нижнего колонтитула n) и с numColumns параметр

Ты можешь попробовать:

  • GridLayout, который доступен для API уровня 7 через бэкпорт из пакета поддержки Android gridlayout-v7 проект библиотеки

  • TableLayout, с помощью android:stretchColumns выделить место для всех столбцов... но это будет работать, только если ячейки имеют одинаковую ширину

  • Вложенные LinearLayouts а также android:layout_weightпоскольку проблемы с производительностью могут или не могут быть проблемой для вас (например, это один вид деятельности или фрагмент, а не строка в ListView)

И вы всегда можете реализовать свой собственный ViewGroup с вашими собственными бизнес-правилами для определения размера и позиционирования ваших дочерних виджетов.

Что вы сейчас пытаетесь - RelativeLayout - кажется, вряд ли будет работать таким образом, чтобы хорошо адаптироваться к разным размерам экрана.

Другие вопросы по тегам