Recycler View水平滚动,带2列

时间:2017-11-15 06:35:12

标签: android android-recyclerview recycler-adapter recyclerview-layout

到目前为止,我已经尝试过了

LinearLayoutManager layoutManager =
        new GridLayoutManager(getActivity(), 2, GridLayoutManager.HORIZONTAL, false);

但它显示了2行而不是2列。

如何使用水平滚动显示两个带有回收站视图的项目?

5 个答案:

答案 0 :(得分:4)

好的,这是一个基础,

当您使用GridLayoutManager.HORIZONTAL时,第二个参数将被视为行数

而当你写GridLayoutManager.VERTICAL时,第二个参数将被视为列数

另外,这个

LinearLayoutManager layoutManager =
        new GridLayoutManager(getActivity(), 2, GridLayoutManager.HORIZONTAL, false);

应该是,

GridLayoutManager layoutManager =
            new GridLayoutManager(getActivity(), 2, GridLayoutManager.HORIZONTAL, false);

在上面的代码中,2被认为是要生成的行数。

答案 1 :(得分:1)

最近遇到了同样的问题,最后创建了一个自定义GridLayoutManager,使我可以将行数和列数固定在一起。

链接:-https://gist.github.com/KaveriKR/04bfef5ffc9c00a8b6fca503da497322

此自定义布局管理器利用generateDefaultLayoutParams和其他两个功能来为布局管理器设置不同的布局参数。

答案 2 :(得分:0)

尝试以下代码

RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(this, 2);
    recyclerView.setLayoutManager(mLayoutManager);

答案 3 :(得分:0)

要实现所需的功能,需要结合两件事:设置GridLayoutManager和设置适配器:

在片段/活动中:

 val snapHelper = PagerSnapHelper()
        snapHelper.attachToRecyclerView(recyclerView)

//Grid layout, 2 columns
        recyclerView.layoutManager =
            GridLayoutManager(this.context, 2, RecyclerView.HORIZONTAL, false)

,然后在您的适配器中:

var displayMetrics = DisplayMetrics()
private var screenWidth = 0

在onCreateViewHolder中:

(parent.context as MainActivity).windowManager.defaultDisplay.getMetrics(displayMetrics)
    screenWidth = displayMetrics.widthPixels

在onBindViewHolder中:

    val itemPadding = 8

    //here you may change the divide amount from 2.5 to whatever you need 
    val itemWidth = (screenWidth - itemPadding).div(2.5)

    val layoutParams = holder.itemView.layoutParams
    layoutParams.height = layoutParams.height
    layoutParams.width = itemWidth.toInt()
    holder.itemView.layoutParams = layoutParams

答案 4 :(得分:-1)

RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(activity,2,LinearLayoutManager.HORIZONTAL,false);
recyclerView.setLayoutManager(mLayoutManager);