基础知识
- GridLayoutManager 继承于 LinearLayoutManager,是 RecyclerView 的布局管理器,主要为了实现宫格布局。
GridLayoutManager.setOrientation(GridLayoutManager.VERTICAL)或HORIZONTAL可以设置 RecyclerView 的延展方向,VERTICAL 便是指纵方向延展。new GridLayoutManager(this, row)或setSpanCount(row)可以设置 RecyclerView 的行列数,具体是行还是列,需要看setOrientation(),是 VERTICAL 便是指行数。
GridLayoutManager gridLayoutManager = new GridLayoutManager(this, column);
gridLayoutManager.setOrientation(GridLayoutManager.VERTICAL);
recyclerView.setLayoutManager(gridLayoutManager);
单方向自适应填充
setOrientation(GridLayoutManager.VERTICAL)+layout_width="match_parent"可以让RecyclerView在横方向宽度自适应;setOrientation(GridLayoutManager.HORIZONTAL)+layout_height="match_parent"可以让RecyclerView在纵方向高度自适应;
宽高双方向自适应填充(我怎么这么贱呢,方法那么多,非得用RecyclerView)
- 以
setOrientation(GridLayoutManager.VERTICAL)+layout_width="match_parent"为例,此时横方向为自适应,纵方向无限延展
- 将 Item 的 android:layout_height 设置为 "match_parent" - 自定义 LinearLayout(我的每个Item都是一个 LinearLayout,以此举例),编写 onMeasure 方法
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int newHeightMeasureSpec = MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(heightMeasureSpec) / line, EXACTLY);
super.onMeasure(widthMeasureSpec, newHeightMeasureSpec);
}
- 这里的
line就是行数 - 修改XML中的 LinearLayout 为 自定义的即可,效果如下


