View.post()
在View绘制成功后执行
firstIv.post(new Runnable() { @Override public void run() { Log.i(TAG, "高度" + firstIv.getHeight() + ",宽度" + firstIv.getHeight()); } });
执行结果
onWindowFocusChanged
在Activity生命周期中监听,这种方法不太好,活动退出时还会再触发一次
@Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); Log.i(TAG, "方法二:高度" + firstIv.getHeight() + ",宽度" + firstIv.getHeight()); }
执行结果
ViewTreeObserver
在View大小或者位置发生变化时会触发,所以要根据业务及时移除监听,不然会反复触发
final ViewTreeObserver viewTreeObserver = firstIv.getViewTreeObserver(); viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { firstIv.getViewTreeObserver().removeOnGlobalLayoutListener(this); Log.i(TAG, "方法三:高度" + firstIv.getHeight() + ",宽度" + firstIv.getHeight()); } });
执行结果