Flexbox水平滚动不起作用-为什么?

时间:2019-03-12 09:29:45

标签: java android android-recyclerview android-flexboxlayout

我只希望3个项目与其余项目的水平滚动一起居中,而且我希望居中的项目在滚动或点击时突出显示。这就是我想要的

enter image description here

我正在使用flexboxlayout管理器,这就是我所做的

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

recyclerView_stats_list.setLayoutManager(flexboxLayoutManager);

并在适配器视图持有器中

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

如果我将弹性方向从列更改为行,则它将我的3个项目居中,但是它开始垂直滚动,我需要同样的内容,但水平滚动。

1 个答案:

答案 0 :(得分:0)

如果您有卧式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);
}

像下面在mainActivity中那样,使用FlexLayoutManager设置您的recyclerView

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

recyclerView.setLayoutManager(layoutManager)

一旦设置好滚动和间距就可以了。您可以创建一个可绘制文件,并在适配器中将onClickListener设置为突出显示。尝试在recyclerView中查找突出显示的元素。在github上阅读有关FlexLayout的详细信息,以了解如何限制屏幕上的3个元素。建议创建一个类ItemDecoration并将其添加到您的recyclerView