android监听View加载完成

本文介绍了在Android项目中如何监听GridView填充并铺满屏幕的过程,通过研究ViewTreeObserver和OnGlobalLayoutListener接口,发现该监听器在布局变化时回调。测试发现该回调可能因屏幕状态变化多次触发,需要谨慎处理防止重复调用。解决方案是在首次回调后移除监听器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近项目中需要实现一个GridView显示6*5=30项,并铺满整个界面,界面中还有自定义ActionBar等其他控件,所以需要获取剩下屏幕的高度。通过百度得知View有一个监听函数,亲测使用有效,特此记录,方便日后查阅。

gv_test.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                //给GridView设置Adapter,在adapter的getView中获取GridView的高度,在这个回调之前获取的高度都是0
                //处理完后remove掉,至于为什么,后面有解释
                gv_test.getViewTreeObserver()
                .removeOnGlobalLayoutListener(this);
            }
        });

通过源码追溯进去,找到ViewTreeObserver这个类,里面有很多interface,都是用来追踪View的各种状态变化的。
找到OnGlobalLayoutListener

/**
     * Interface definition for a callback to be invoked when the global layout state
     * or the visibility of views within the view tree changes.
     */
    public interface OnGlobalLayoutList
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值