Activity在OnCreate中获取某个View的宽高为0的问题

本文介绍了解决Android中View宽高初始化为0的问题,提供了三种有效的方法:监听全局变化、使用post方式延迟获取以及利用onWindowFocusChanged回调。

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

产生这个问题的原因是,你获取的时候,View的绘制流程还没有结束,View 也许还没执行完 measure 阶段,那么自然获取到的宽高结果为 0。获取方式如下:

1、监听全局变化

view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        if (Build.VERSION.SDK_INT >= 16) {
            view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
        }else {
            view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
        }
        int width = view.getWidth();
    }
});

2、通过post方式

view.post(new Runnable() {
    @Override
    public void run() {
        int width = view.getWidth();
    }
});

 3、通过onWindowFocusChanged方法

 @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        if(hasFocus){
            int width= view.getWidth();
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值