博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
记一个RecyclerView获取高度的问题
阅读量:7217 次
发布时间:2019-06-29

本文共 1299 字,大约阅读时间需要 4 分钟。

问题描述

项目主界面暂定为九宫格样式,为了便于以后修改,决定用 RecyclerView 来实现,遇到的问题是九宫格会占满界面中间的位置,但高度是未知的。九宫格要求横纵都是三等分,横向的三列很好办, RecyclerView 的 GridLayoutManager 自身就可以实现。纵向的三行因为高度不确定,所以在布局时直接为子项 item 赋予确定的高度是不可行的,初步想法是动态设置 item 的高度。

解决方案

在代码中动态的为 item 设置整个 RecyclerView 三分之一的高度,首先要获取 RecyclerView 的高度,但在 onCreat()方法中直接获取到的高度是 0 ,这里采用了网上提供的一种方法,获取 ViewTreeObserver 并注册 OnGlobalLayoutListener(当全局布局状态改变或者视图树中视图的可见性发生变化时会进行调用),在这个监听中我们就可以获取 RecyclerView 的高度了。代码如下:

recyclerView = findViewById(R.id.rv_main);        models = new ArrayList<>();        adapter = new MainAdapter(R.layout.item_main, models);        gridLayoutManager = new GridLayoutManager(this, 3);        //要先为 RecyclerView 设置 adapter 和 LayoutManager,否则 RecyclerView 会跳过布局(skipping layout)        recyclerView.setAdapter(adapter);        recyclerView.setLayoutManager(gridLayoutManager);        viewTreeObserver = recyclerView.getViewTreeObserver();        viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {            @Override            public void onGlobalLayout() {                //移除监听,只用于布局初始化                recyclerView.getViewTreeObserver().removeOnGlobalLayoutListener(this);                //传入 RecyclerView 高度,并做一些 Adapter 的初始化工作                initAdapter(recyclerView.getHeight());            }        });复制代码

转载地址:http://keiym.baihongyu.com/

你可能感兴趣的文章
一些问题
查看>>
ubuntu配置cudnn
查看>>
P1242 新汉诺塔 && UVA10795 A Different Task
查看>>
从零开始学习PYTHON3讲义(十一)计算器升级啦
查看>>
从零开始学习PYTHON3讲义(三)写第一个程序
查看>>
WebGis设计模式
查看>>
cocos2dx ScrollView 测试一 触摸事件优先级和自动调整
查看>>
django 使用mysql数据库的流程
查看>>
Android系统移植与调试之------->如何修改Android设备的默认休眠时间
查看>>
我的Android进阶之旅------>Java文件大小转换工具类 (B,KB,MB,GB,TB,PB之间的大小转换)...
查看>>
uboot 传递的参数 mtdparts
查看>>
六种排序算法C语言版(上)
查看>>
292. Nim Game(easy)
查看>>
ERROR 1786 (HY000)
查看>>
Kubernetes 学习7 Pod控制器应用进阶2
查看>>
Python字符串相加以及字符串格式化
查看>>
11.08 轮换行值
查看>>
AIX lsof 命令
查看>>
微信小程序个人项目(node.js+koa2+koa-router+middleware+mysql+node-mysql-promise+axios)
查看>>
C#温故而知新学习系列之面向对象编程—类的数据成员(三)
查看>>