Android中RecyclerView如何实现自动换行
Posted kaolagirl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android中RecyclerView如何实现自动换行相关的知识,希望对你有一定的参考价值。
在项目中是要经常使用到RecyclerView的,在没写这篇文章之前,我往往都是使用 GridLayoutManager来实现一行显示多个item的布局,但是这种做法是非常不灵活的,因为item的个数是固定的,且不能随着其长短来自动换行,所以今天就来跟大家分享下如何实现自动换行!
参考博文【链接】
1. 自定义 LayoutManager
自定义一个MyLayoutManager类继承于LayoutManager,其代码如下:
/**
* 自动换行布局管理
* wang 2021/7/12
*/
public class MyLayoutManager extends RecyclerView.LayoutManager {
@Override
public RecyclerView.LayoutParams generateDefaultLayoutParams() {
return new RecyclerView.LayoutParams(
RecyclerView.LayoutParams.WRAP_CONTENT,
RecyclerView.LayoutParams.WRAP_CONTENT);
}
@Override
public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
// super.onLayoutChildren(recycler, state);
detachAndScrapAttachedViews(recycler);
int sumWidth = getWidth();
int curLineWidth = 0, curLineTop = 0;
int lastLineMaxHeight = 0;
for (int i = 0; i < getItemCount(); i++) {
View view = recycler.getViewForPosition(i);
addView(view);
measureChildWithMargins(view, 0, 0);
int width = getDecoratedMeasuredWidth(view);
int height = getDecoratedMeasuredHeight(view);
curLineWidth += width;
if (curLineWidth <= sumWidth) {//不需要换行
layoutDecorated(view, curLineWidth - width, curLineTop, curLineWidth, curLineTop + height);
//比较当前行多有item的最大高度
lastLineMaxHeight = Math.max(lastLineMaxHeight, height);
} else {//换行
curLineWidth = width;
if (lastLineMaxHeight == 0) {
lastLineMaxHeight = height;
}
//记录当前行top
curLineTop += lastLineMaxHeight;
layoutDecorated(view, 0, curLineTop, width, curLineTop + height);
lastLineMaxHeight = height;
}
}
}
}
2.使用
使用方式和平时使用recyclerview一样 ,在创建适配器时把布局替换 MyLayoutManager 即可
MyLayoutManager layout = new MyLayoutManager();
layout.setAutoMeasureEnabled(true);//防止recyclerview高度为wrap时测量item高度0(一定要加这个属性,否则显示不出来)
searchHistory_rv.setLayoutManager(layout);
goodSearchHistoryAdapter = new GoodSearchHistoryAdapter(this);
searchHistory_rv.setAdapter(goodSearchHistoryAdapter);
以上是关于Android中RecyclerView如何实现自动换行的主要内容,如果未能解决你的问题,请参考以下文章
Android 中ViewPager嵌套RecyclerView出现滑动冲突的解决方案
Android——实现RecyclerView左侧滑删除与右侧滑选择