Android开发Android技术知识Android开发经验谈

Android - Activity中获取View的宽高

2018-06-15  本文已影响4人  AnRFDev

有些时候我们需要获取到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);
            }
        });
上一篇 下一篇

猜你喜欢

热点阅读