Android - Activity中获取View的宽高
2018-06-15 本文已影响4人
AnRFDev
有些时候我们需要获取到View的宽高信息。在onCreate和onResume中尝试view.getWidth()或是view.getHeiht()时,我们会发现获取到的是0。
Activity视图在创建完成后,各个子view并不一定被加载完成。
获取宽高正确的方法有哪些呢?
方法1 - 在Activity的onWindowFocusChanged
获取宽高
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
// 在这里我们可以获取到View的真实宽高
Log.d(TAG, "onWindowFocusChanged: mBtn1.getWidth == " + mBtn1.getWidth());
}
方法2 - 使用ViewTreeObserver的OnGlobalLayoutListener
回调
获取View的ViewTreeObserver,添加回调
ViewTreeObserver vto = mBtn1.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int height = mBtn1.getHeight();
int width = mBtn1.getWidth();
Log.d(TAG, "onGlobalLayout: mBtn1 " + width + ", " + height);
mBtn1.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});