Сделайте несколько строк в RecyclerView с GridLayoutManager меньшим количеством элементов с горизонтальным смещением - PullRequest
0 голосов
/ 02 апреля 2020

Я создаю приложение календаря, и мне нужен способ отображения дат по месяцам. С RecylcerView, есть ли способ сделать так, чтобы у некоторых строк было меньше элементов, и соответственно ли эти элементы были смещены? Например, если месяц начинается в среду, в первой строке будет только 4 элемента, а первый элемент в этой строке будет находиться непосредственно над 4-м элементом в строках под ним. Все предметы должны иметь одинаковый размер. Есть ли способ сделать это, или я должен сделать что-то вроде полной сетки (без сдвигов), но каким-то образом получить пустые ячейки, которые я не хочу показывать?

1 Ответ

0 голосов
/ 02 апреля 2020

Я думаю, что FlexboxLayoutManager из https://github.com/google/flexbox-layout может соответствовать вашим потребностям

Когда этот пункт является «первым днем ​​недели», вы должны установить для него wrapBefore пункт, и вы также установите justifyContent на макете, чтобы быть flex_end

С этим вы вручную контролируете, сколько элементов в строке.

Обновление: пока это Решение работает для начала месяца, оно просто переносит проблему на конец месяца

enter image description here

Я сделал это в onBindViewHolder в переработчике В адаптере с приведенным ниже кодом держатель представления фрейма был просто элементом макета root макета элемента переработчика.

public void onBindViewHolder(@NonNull DaysViewHolder holder, int position) {
        final Pair<Integer,String> day = dayList.get(position);
        holder.dayNumber.setText(String.format(Locale.ROOT,"%d", day.first));
        holder.dayName.setText(String.format(Locale.ROOT,"%s", day.second));
        if (day.second.equals("Sunday")) {
            ViewGroup.LayoutParams lp = holder.frame.getLayoutParams();
            FlexboxLayoutManager.LayoutParams flexboxLp = (FlexboxLayoutManager.LayoutParams) lp;
            flexboxLp.setWrapBefore(true);
        }
    }

Если вы посмотрите на многие пользовательские интерфейсы календаря, они дополняют начало и конец месяцев. с фактическими днями предыдущего и следующего месяца.

например

enter image description here

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