Android View何时能拿到宽高的值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android View何时能拿到宽高的值相关的知识,希望对你有一定的参考价值。

参考技术A

一个View或ViewGroup中什么什么时候能拿到宽高的值?

width 表示 View 在屏幕上可显示的区域大小;
measuredWidth 表示 View 的实际大小,包括超出屏幕范围外的尺寸;

甚至有这样的公式总结到:
getMeasuredWidth() = visible width + invisible width

getMeasuredWidth() 在执行setMeasuredDimension(一般在onMeasure方法中执行)后才有值;
getWidth()在onLayout方法执行后才有值。



Constructor : 构造方法,View初始化的时候调用,在这里是无法获取其子控件的引用的.更加无法获取宽高了.

onFinishInflate : 当布局初始化完毕后回调,在这里可以获取所有直接子View的引用,但是无法获取宽高.

onMeasure : 当测量控件宽高时回调,当调用了requestLayout()也会回调onMeasure.在这里一定可以通过getMeasuredHeight()和getMeasuredWidth()来获取控件的高和宽,但不一定可以通过getHeight()和getWidth()来获取控件宽高,因为getHeight()和getWidth()必须要等onLayout方法回调之后才能确定.

onSizeChanged : 当控件的宽高发生变化时回调,和onMeasure一样,一定可以通过getMeasuredHeight()和getMeasuredWidth()来获取控件的高和宽,因为它是在onMeasure方法执行之后和onLayout方法之前回调的.

onLayout : 当确定控件的位置时回调,当调用了requestLayout()也会回调onLayout.在这里一定可以通过getHeight()和getWidth()获取控件的宽高,同时由于onMeasure方法比onLayout方法先执行,所以在这里也可以通过getMeasuredHeight()和getMeasuredWidth()来获取控件的高和宽.

addOnGlobalLayoutListener : 当View的位置确定完后会回调改监听方法,它是紧接着onLayout方法执行而执行的,只要onLayout方法调用了,那么addOnGlobalLayoutListener的监听器就会监听到.在这里getMeasuredHeight()和getMeasuredWidth()和getHeight()和getWidth()都可以获取到宽高.

onWindowFocusChanged : 当View的焦点发送改变时回调,在这里getMeasuredHeight()和getMeasuredWidth()和getHeight()和getWidth()都可以获取到宽高.Activity也可以通过重写该方法来判断当前的焦点是否发送改变了;需要注意的是这里View获取焦点和失去焦点都会回调.



(部分内容参考于网络,如有不妥,请联系删除~)

以上是关于Android View何时能拿到宽高的值的主要内容,如果未能解决你的问题,请参考以下文章

Android 获取 View 宽高的常用正确方式,避免为零

Android-ViewPager源码解析与性能优化

Android View保存为bitmap

Android基础篇 Android获取屏幕宽高的方法

Android View保存为bitmap

Android获取屏幕宽高的三种方式