有这么一个需求,一个列表要满足一个条件
1、列表少于等于5条,列表的高度跟随item的数量变化而变化
2、如果超过5条,按照最大5条的高度显示,并支持滚动
所以基本的由于item高度不能定死,所以支持设置recyclerView高度是wrap_content
然后具体操作看了下源码,大部分计算都是在LayoutManager中,找到这里
void setMeasuredDimensionFromChildren(int widthSpec, int heightSpec) {
final int count = getChildCount();
if (count == 0) {
mRecyclerView.defaultOnMeasure(widthSpec, heightSpec);
return;
}
int minX = Integer.MAX_VALUE;
int minY = Integer.MAX_VALUE;
int maxX = Integer.MIN_VALUE;
int maxY = Integer.MIN_VALUE;
for (int i = 0; i < count; i++) {
View child = getChildAt(i);
final Rect bounds = mRecyclerView.mTempRect;
getDecoratedBoundsWithMargins(child, bounds);
if (bounds.left < minX) { </