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);
}
});