RecyclerView的自适应高度
来源:互联网 发布:java 成员方法 编辑:程序博客网 时间:2024/05/23 00:08
RecyclerView一般用来全屏显示是最好的,不过有的时候我们也需要用它来做九宫格等控件,这个时候不得不用到自适应高度来显示这部分了!
其实只要我们在装载完成它的数据集之后,在自定义的LayoutManager中监听它的子控件的高度就可以了~!效果如图:
这张图的中间部分就是使用的RecyclerView自适应高度来做的!
下面是Manager的自定义:
package com.cq.cake.util;import android.content.Context;import android.content.res.TypedArray;import android.graphics.drawable.Drawable;import android.support.v4.widget.SwipeRefreshLayout;import android.support.v7.widget.GridLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.ViewTreeObserver;import com.cq.cake.adapter.WeatherAdapter;/** * Created by Small Cake on 2015/12/24. * 复写GridLayoutManager的onMeasure动态设置RecyclerView的高度 */public class ItemGridLayoutManager extends GridLayoutManager { WeatherAdapter adapter; TypedArray a; Drawable mDivider; ViewTreeObserver obs; /** * @param context 上下文 * @param spanCount 列数 * @param adapter 数据适配器 * @param recyclerView 当前的RecyclerView */ public ItemGridLayoutManager(Context context, int spanCount, WeatherAdapter adapter, final RecyclerView recyclerView) { super(context, spanCount); this.adapter = adapter; a = context.obtainStyledAttributes(new int[]{android.R.attr.listDivider}); mDivider = a.getDrawable(0); obs = recyclerView.getViewTreeObserver(); obs.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { calculeRecyclerViewFullHeight(recyclerView); obs.removeOnPreDrawListener(this); return true; } }); } /** * 刷新高度,使RecyclerView得高度为wrap_content */ private void calculeRecyclerViewFullHeight(RecyclerView recyclerView) { int height = 0; height = recyclerView.getChildAt(0).getHeight(); int line = adapter.getItemCount() / getSpanCount(); if (adapter.getItemCount() % getSpanCount() > 0) { line++; } SwipeRefreshLayout.LayoutParams params = recyclerView.getLayoutParams(); params.height = height * line + (line - 1) * mDivider.getIntrinsicWidth(); recyclerView.setLayoutParams(params); }}希望对需要做自适应高度的同学有所帮助,使用的时候
mRecyclerView.setLayoutManager(new ItemGridLayoutManager(this, 3, adapter, mRecyclerView));
缺点就是参数太多了,希望厉害的大神帮忙改进~!
2 0
- RecyclerView的自适应高度
- RecyclerView自适应高度的LayoutManager
- RecyclerView自适应高度的LinearLayoutManager
- android RecyclerView自适应高度的LayoutManager
- RecyclerView自适应高度
- RecyclerView自适应高度
- 解决 RecyclerView 自适应高度
- RecyclerView 自适应高度
- RecyclerView高度随Item自适应
- RecyclerView高度随Item自适应
- RecyclerView高度随Item自适应
- RecyclerView高度随Item自适应
- RecyclerView 自适应高度 正确做法。
- RecyclerView 自适应高度 正确做法
- recyclerview高度根据条目自适应
- ScrollView 嵌套 RecyclerView 高度自适应遇到的问题
- 使用RecyclerView实现的瀑布流高度自适应
- 使用RecyclerView实现的瀑布流高度自适应
- 【Linux】linux常用基本命令
- 前端必读:浏览器内部工作原理
- Java项目管理工具-Maven
- 微信公众号开发之获取access_token[java版]
- volley框架学习(2)
- RecyclerView的自适应高度
- 蓝牙SDK尽在BtSDK平台,免费蓝牙SDK定制
- apache经常卡死解决办法
- STVD 新建STM8L151工程
- 五大常用算法之二:动态规划算法
- 利用MATLAB进行符号计算
- 报错:Binary XML file line #7: Error inflating class android.support.v7.widget.RecyclerView
- 变态跳台阶
- httpClient post/get请求。