基础知识
- 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 为 自定义的即可,效果如下