Android 常见面试题之 - Activity获取某个 View 的宽高

87 阅读1分钟

1. 通过 Activity的onWindowFocusChanged

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    // 当 Activity 的窗口得到焦点和失去焦点时均会被调用一次
    if (hasFocus) {
        int width = view.getMeasuredWidth();
        int height = view.getMeasuredHeight();
    }
}

2. 通过 view.post(runnable)

@Override
protected void onStart() {
    super.onStart();
    
    view.post(() -> {
        int width = view.getMeasuredWidth();
        int height = view.getMeasuredHeight();
    });
}

3. 通过 ViewTreeObserver

@Override
protected void onStart() {
    super.onStart();

    ViewTreeObserver observer = view.getViewTreeObserver();
    observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            int width = view.getMeasuredWidth();
            int height = view.getMeasuredHeight();
        }
    });
}