RecyclerView的进阶使用,一个LayoutManger下添加多种布局
来源:互联网 发布:猎头 候选人推荐算法 编辑:程序博客网 时间:2024/06/15 12:05
写这篇文章是因为最近看了bilibili的首页,感觉是一个RecylcerView写的,于是就有了这片文章:
之所以把这俩个分开是因为,设置方式不一样,看下边介绍:
首先定义多种item布局:
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == TYPE1) {//list类型 View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.reclycer_layout, parent, false); return new ListHolder(view); } else if (viewType == TYPE2) {//grid类型 View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.reclycer_layout, parent, false); return new GridHolder(view); } return null; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (holder instanceof ListHolder) { ListHolder listHolder = (ListHolder) holder; listHolder.textView.setText(list.get(position)); } else if (holder instanceof GridHolder) { GridHolder gridHolder = (GridHolder) holder; gridHolder.textView.setText(list.get(position)); } }如果是瀑布流布局,贴一下关键代码:
@Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (holder instanceof ListHolder) { ListHolder listHolder = (ListHolder) holder; listHolder.textView.setText(list.get(position)); StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) listHolder.textView.getLayoutParams(); layoutParams.setFullSpan(true); } else if (holder instanceof GridHolder) { GridHolder gridHolder = (GridHolder) holder; gridHolder.textView.setText(list.get(position)); } }
另外一种GridLayoutManger的 ,主要是
setSpanSizeLookup()这个方法,源码如下
/** * Sets the source to get the number of spans occupied by each item in the adapter. * * @param spanSizeLookup {@link SpanSizeLookup} instance to be used to query number of spans * occupied by each item */ public void setSpanSizeLookup(SpanSizeLookup spanSizeLookup) { mSpanSizeLookup = spanSizeLookup; }
可以看出需要传入一个SpansizeLookup对象,接着写一个类继承这个类
设置每个Item 所占得位置 默认是1 如果你的2列 这里可以在添加头部的时候 设置为2 就会占一整行了
class MySpanSizeLookup extends GridLayoutManager.SpanSizeLookup { @Override public int getSpanSize(int position) { if (position < 6) {//前6个item默认占一整行 return 2; } else { //返回默认值 因为我设置的是2个默认 既2个占位一行 return 1; } } }
在activity中去设置
manager = new GridLayoutManager(mContext, 2); manager.setSpanSizeLookup(new MySpanSizeLookup());
想要的效果就出来了。
最后LieanerLayoutMannger就更简单了,自己去试试。
0 0
- RecyclerView的进阶使用,一个LayoutManger下添加多种布局
- RecyclerView添加多种布局
- RecyclerView使用(二)多种Item布局、添加点击事件
- vlayout(Android)RecyclerView的自定义的LayoutManger,实现不同布局格式的混排
- RecyclerView的多种布局MultiItemTypeAdapter
- RecyclerView的加载显示多种布局
- RecyclerView的加载显示多种布局
- RecyclerView的加载显示多种布局
- RecyclerView显示加载多种布局的原理
- RecyclerView的加载显示多种布局
- RecyclerView的加载显示多种布局
- RecyclerView中的多种布局
- RecyclerView中的多种布局
- RecyclerView中的多种布局
- RecyclerView展示多种布局
- RecyclerView多种item布局
- RecyclerView的添加头部布局
- RecyclerView添加头脚布局,使用SwipeRefreshLayout的实现
- Cookie/Session机制详解
- oracle 监听启动、停止、查看命令
- 111. Minimum Depth of Binary Tree
- Spark性能优化第四季
- 《Windows API》获取文件属性数据
- RecyclerView的进阶使用,一个LayoutManger下添加多种布局
- 为什么寄存器比内存快?
- 55-003-1 HTML5实现文字标题列表显示--鼠标经过时文字动态阴影展示
- centos7防火墙使用(firewalld)
- Delphi 如何制作带阴影窗体
- Linux系统上安装mysql5.7.12
- 你的OA,坚持应用了吗?
- C++指针与地址引用
- Tomcat内存配置、参数说明