Android - Activity中获取View的宽高

作者: AnRFDev | 来源:发表于2018-06-15 22:03 被阅读4次

有些时候我们需要获取到View的宽高信息。在onCreate和onResume中尝试view.getWidth()或是view.getHeiht()时,我们会发现获取到的是0。
Activity视图在创建完成后,各个子view并不一定被加载完成。
获取宽高正确的方法有哪些呢?

方法1 - 在Activity的onWindowFocusChanged获取宽高

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        // 在这里我们可以获取到View的真实宽高
        Log.d(TAG, "onWindowFocusChanged: mBtn1.getWidth == " + mBtn1.getWidth());
    }

方法2 - 使用ViewTreeObserver的OnGlobalLayoutListener回调

获取View的ViewTreeObserver,添加回调

        ViewTreeObserver vto = mBtn1.getViewTreeObserver();
        vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                int height = mBtn1.getHeight();
                int width = mBtn1.getWidth();
                Log.d(TAG, "onGlobalLayout: mBtn1 " + width + ", " + height);
                mBtn1.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            }
        });

相关文章

网友评论

  • 代码GG陆晓明:Attach towindow
    代码GG陆晓明:@RustFisher 对的,这个为0的原因是没走过测量,这个onAttachedToWindow就会测量过的。自定义的view,可以在onfinxxxxxx 那个里面去获取宽高。如果就要在activity oncreate获取,可以直接调用view的测量方法,得到数据。
    AnRFDev::smiley: 指的是Activity的`onAttachedToWindow`方法吗?
  • 故事细腻言不由己:可以试试view.post
    AnRFDev::smile: 谢谢指出,已更新

本文标题:Android - Activity中获取View的宽高

本文链接:https://www.haomeiwen.com/subject/jbcveftx.html