Я думаю, что FlexboxLayoutManager
из https://github.com/google/flexbox-layout может соответствовать вашим потребностям
Когда этот пункт является «первым днем недели», вы должны установить для него wrapBefore
пункт, и вы также установите justifyContent
на макете, чтобы быть flex_end
С этим вы вручную контролируете, сколько элементов в строке.
Обновление: пока это Решение работает для начала месяца, оно просто переносит проблему на конец месяца
Я сделал это в 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);
}
}
Если вы посмотрите на многие пользовательские интерфейсы календаря, они дополняют начало и конец месяцев. с фактическими днями предыдущего и следующего месяца.
например