获取Android控件宽高

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

执行结果

 

posted @ 2020-07-15 22:43  夜空中最亮的盖子  阅读(595)  评论(0)    收藏  举报