Горизонтальная прокрутка Flexbox не работает — почему?

#java #android #android-recyclerview #android-flexboxlayout

#java #Android #android-recyclerview #android-flexboxlayout

Вопрос:

Я хочу, чтобы только 3 элемента были центрированы вместе с горизонтальной прокруткой для оставшихся элементов, также я хочу, чтобы элемент по центру выделялся при прокрутке или касании. Вот что я хочу

введите описание изображения здесь

Я использую flexboxlayout manager, и вот что я сделал

 flexboxLayoutManager=new FlexboxLayoutManager(getContext());
flexboxLayoutManager.setJustifyContent(JustifyContent.SPACE_AROUND);
flexboxLayoutManager.setFlexDirection(FlexDirection.COLUMN);
flexboxLayoutManager.setFlexWrap(FlexWrap.WRAP);

recyclerView_stats_list.setLayoutManager(flexboxLayoutManager);
  

и в адаптере viewholder

  ViewGroup.LayoutParams lp = itemView.getLayoutParams();
        if (lp instanceof FlexboxLayoutManager.LayoutParams) {
            FlexboxLayoutManager.LayoutParams flexboxLp =
                    (FlexboxLayoutManager.LayoutParams) itemView.getLayoutParams();
            flexboxLp.setFlexGrow(1.0f);
        }
  

Если я изменяю направление flex от столбца к строке, оно центрирует мои 3 элемента, но затем оно начинает прокручиваться по вертикали, мне нужно то же самое, но с горизонтальной прокруткой.

Ответ №1:

Если у вас есть горизонтальный RecyclerView, вы можете использовать его в своем адаптере

 ViewGroup.LayoutParams lp = viewHolder.itemView.getLayoutParams();
if (lp instanceof FlexboxLayoutManager.LayoutParams) {
FlexboxLayoutManager.LayoutParams flexboxLp = 
(FlexboxLayoutManager.LayoutParams) lp;
flexboxLp.setFlexShrink(0.0f);
flexboxLp.setAlignSelf(AlignSelf.FLEX_END);
}
  

настройте RecyclerView с помощью FlexLayoutManager следующим образом в вашем MainActivity

 FlexboxLayoutManager layoutManager = new FlexboxLayoutManager(mContext);
layoutManager.setFlexDirection(FlexDirection.ROW);
layoutManager.setFlexWrap(FlexWrap.NOWRAP);
layoutManager.setJustifyContent(JustifyContent.SPACE_AROUND);

recyclerView.setLayoutManager(layoutManager)
  

после настройки прокрутки и интервала все в порядке. Вы можете создать файл с возможностью рисования и настроить OnClickListener в вашем адаптере для выделения. Попробуйте поискать элементы подсветки в RecyclerView. Прочитайте о FlexLayout на github, чтобы получить больше информации о том, как вы можете ограничить 3 элемента на экране. Я бы рекомендовал создать класс ItemDecoration и добавить его в ваш RecyclerView