GridLayoutManager пересчитать количество столбцов - PullRequest
0 голосов
/ 09 марта 2020

Мне нужно сделать что-то вроде этого:

enter image description here

Как мне это сделать?

Обновление

Это почти работает.

    GridLayoutManager layoutManager = new GridLayoutManager(this, 3);
    layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup()
    {
        @Override
        public int getSpanSize(int position)
        {
            if (position == mElements.size()-1)
            {
                return 1;
            }
            else
            {
                SchedulePlanGlobal elem = mElements.get(position);
                SchedulePlanGlobal elemNext = mElements.get(position+1);

                if (elem.getRoomName().charAt(0) == elemNext.getRoomName().charAt(0))
                {
                    return 1;
                }
                else
                {
                    return calculateSpan(position);
                }
            }
        }

        private int calculateSpan(int position)
        {
            if (position == 0) return 3;
            else
            {
                int currentPosition = position - 1;
                int elements = 0;

                while (currentPosition != 0)
                {
                    if (mElements.get(currentPosition).getRoomName().charAt(0) == mElements.get(position).getRoomName().charAt(0))
                    {
                        elements ++;
                    }
                    else
                    {
                        break;
                    }
                    currentPosition --;
                }

                int spanPosition = (elements % 3) + 1;

                switch (spanPosition)
                {
                    case 1: return 3;
                    case 2: return 2;
                    default: return 1;
                }
            }
        }
    });

Ответы [ 2 ]

0 голосов
/ 09 марта 2020

Другой менеджер компоновки может быть более простым решением.

Я предлагаю использовать https://github.com/google/flexbox-layout

Вы бы установили диспетчер компоновки на wrap, так что если ваши предметы не помещались на горизонтальной линии, тогда они переносились бы на новую строку, это облегчало размещение на экранах разных размеров.

Тогда для вашего 5-го элемента, который, как вы знаете, вы хотите, на новой строке вы бы использовали атрибут layout_wrapBefore. Я бы посмотрел пример layout_wrapBefore в документации

0 голосов
/ 09 марта 2020

Реализуйте и установите GridLayoutManager.SpanSizeLookup.

override fun getSpanSize(position: Int) = /* set value based on position */

С этим вы можете определить, сколько элементов диапазона (столбцов) следует использовать. В вашем случае 4-й элемент должен занимать все 3 столбца, а другой должен занимать только 1 столбец.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...