自定义LinearLayoutManager重新测量item高度
时间: 2024-03-02 16:50:28 浏览: 94
如果您使用自定义的 LinearLayoutManager,想要重新测量 RecyclerView item 高度,可以在自定义的 LayoutManager 中重写 `onMeasure()` 方法。
具体实现方式如下:
1. 在自定义的 LinearLayoutManager 中创建一个 int 类型的数组,用于存储每个 item 的高度。
```
private int[] mMeasuredHeight;
```
2. 在自定义的 LayoutManager 中重写 `onMeasure()` 方法。
```
@Override
public void onMeasure(RecyclerView.Recycler recycler, RecyclerView.State state, int widthSpec, int heightSpec) {
super.onMeasure(recycler, state, widthSpec, heightSpec);
if (mMeasuredHeight == null) {
mMeasuredHeight = new int[getItemCount()];
}
int width = View.MeasureSpec.getSize(widthSpec);
int height = View.MeasureSpec.getSize(heightSpec);
int heightMode = View.MeasureSpec.getMode(heightSpec);
int totalHeight = 0;
for (int i = 0; i < getItemCount(); i++) {
View view = recycler.getViewForPosition(i);
measureChildWithMargins(view, widthSpec, 0, heightSpec, 0);
mMeasuredHeight[i] = getDecoratedMeasuredHeight(view);
totalHeight += mMeasuredHeight[i];
recycler.recycleView(view);
}
if (heightMode == View.MeasureSpec.EXACTLY) {
height = height;
} else {
height = totalHeight;
}
setMeasuredDimension(width, height);
}
```
3. 在 onMeasure() 方法中,首先判断 mMeasuredHeight 数组是否为空,如果为空则创建一个数组,用于存储每个 item 的高度。
4. 然后,通过循环遍历每个 item,测量每个 item 的高度,并将其保存到 mMeasuredHeight 数组中。
5. 最后,根据所有 item 的高度总和,设置 RecyclerView 的高度。
注意,重新测量 item 高度可能会影响 RecyclerView 的性能,特别是在数据量较大时。因此,建议您在使用自定义 LinearLayoutManager 重新测量 item 高度时,仅在必要时使用,或者在使用时进行适当的优化。
相关推荐
![.zip](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)