Android 获取View宽高三种方法的使用场景
- 第一种measure();
int w = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);
int h = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);
mView.measure(w, h);
int Width = mView.getMeasuredWidth();
int Height = mView.getMeasuredHeight();
measure这种方法适用直接测量一个View,如ImageView TextView等。
2.第二种view.post()
view.post(new Runnable() {
@Override
public void run() {
int height = view.getHeight();
}
});
3.第三种对View 的监听,布局完成后回调.
view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
view.postDelayed(new Runnable() {
@Override
public void run() {
int height = view.getHeight();
}
}, 300);
}
});
说明:由于第二种和第三种使用场景一样,所以就放在一起说了。
第二种和第三种适用于拿到addView之后容器的宽高,如用了一个LinearLayout代码add了View之后想拿到
LinearLayout容器的宽度就要使用第二种或第三种,用第一种方法拿到的是错误的宽高。
以上说明都是本人在实际项目中踩的坑,以此记录。