android onCreate()中获取view宽高为0解决方案

337 阅读1分钟

Android中获取控件宽高的4种方法集合
描述:由于onCreate()时,view还没有完成绘制,所以此时通过view.getWidth()和view.getHeight()获取的值为0,如果想获取真实宽高,可通过以下两种方法

1.view.post

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

2.ViewTreeObserver

ViewTreeObserver是一个接口,内部有一系列和view相关的方法,其中包括布局,焦点监听方法等,当View树的状态发生改变或者View树内部的可见性发生改变时,onGlobalLayout方法将被回调.

final View view = root;
ViewTreeObserver observer = view.getViewTreeObserver();
observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
  @Override
  public void onGlobalLayout() {
    view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
    int width = view.getMeasuredWidth();
    int height = view.getMeasuredHeight();
    Log.i(TAG, width + " " + height);
  }
});