Gridlayout管理器,每行中包含不同的列号

时间:2018-04-14 08:20:17

标签: android android-recyclerview gridlayoutmanager

我需要一个具有不同列数的回收站视图。为此,我使用了具有动态跨度大小的gridlayout管理器。这是我的代码:

rvSubCat.layoutManager = StaggeredGridLayoutManager(4, 1)
        val viewTreeObserver = rvSubCat.getViewTreeObserver()
        viewTreeObserver.addOnGlobalLayoutListener(ViewTreeObserver.OnGlobalLayoutListener { calculateSize() })
        categoryAdapter = CategoryAdapter(categoryList, true, this)
        rvSubCat.adapter = categoryAdapter


 private fun calculateSize() {
        val spanCount = Math.floor((rvSubCat.getWidth() / SizeUtils.dp2px(sColumnWidth.toFloat())).toDouble()).toInt()
        (rvSubCat.getLayoutManager() as StaggeredGridLayoutManager).spanCount = spanCount
    }

但是期望的结果并不好。它正在修复每行中的列数。我需要的列数应该取决于行项的总宽度。

需要此(所需结果):

enter image description here

获取此

enter image description here

2 个答案:

答案 0 :(得分:1)

我使用的最佳轻量级库

compile 'com.xiaofeng.android:flowlayoutmanager:1.2.3.2'

Benifit你不需要改变你现有的代码,你只需要改变recyclerview的LayoutManager就好了

recyclerView.setLayoutManager(new FlowLayoutManager());

你们都准备好了,快乐的编码:)

更新您已经知道如何填充回收站视图。但请通过以下方式验证

private void setAdapter() {
    recyclerView = (RecyclerView) fragment_view.findViewById(R.id.rv);
    recyclerView.setLayoutManager(new FlowLayoutManager());
    myRecyclerAdapter = new AdapterOrders(getActivity(), list);
    recyclerView.setAdapter(myRecyclerAdapter);
}

从任何来源更改列表后,请致电myRecyclerAdapter.notifyDataSetChanged();

答案 1 :(得分:0)

您需要的是流程布局。我认为这些图书馆将帮助您解决目的:

https://github.com/nex3z/FlowLayout
https://github.com/ApmeM/android-flowlayout

根据文字大小进行调整。希望这有帮助!