下面整理了三种获取view的宽高方式:
1.在Activity中的onWindowFocuseChanged中获取:
/*
* 1.该方法会因Activity是否可见回调多次,伴随着onStop和onResume触发
*/
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if(hasFocus){
int width=textView.getMeasuredWidth();
int height= textView.getMeasuredHeight();
}
}
2.使用view.post的方式获取view的宽高,原理是发送message到队列尾部,消息触发的时候view的测量工作已经完成:
//2.发送一个消息到消息队列的尾部,这时view的测量流程已经执行结束了,所以可以拿到宽高
textView.post(new Runnable() {
@Override
public void run() {
int width=textView.getMeasuredWidth();
int height= textView.getMeasuredHeight();
}
});
3.使用viewTreeObsever监听view树状态的变化.
/*3.监听view树的状态也可以拿到宽高
* 使用ViewTreeObserver的众多回调可以完成这个功能,比如使用onGlobalLayoutListener这个接口.
* 当view树发生改变,或者View树内部的view的可见性发生改变时,此方法将被调用.此方法可能会被调用多次,该方法也会执行多次不推荐采用。
*/
ViewTreeObserver viewTreeObserver=textView.getViewTreeObserver();
viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int width=textView.getMeasuredWidth();
int height= textView.getMeasuredHeight();
}
});
网友评论