getMeasuredHeight和getHeight区别
getMeasuredHeight:是用于测量的高度,也就是View实际的高度(先暂时这么记,后面还有一个显示出来的高度),getMeasuredHeight的值是在onMeasure方法里面通过setMeasuredDimension();
设置出来的。也就是说要在onMeasure方法之后调用,不能再之前,这样会得到0。
getHeight:是指在屏幕上显示出来的高度(这里要强调一点就是不能再onCreate方法里面获得一个View的高度),这个方法得到的是View显示在桌面上的高度(跟前面测量的高度相对对应),因为View的onMeasure方法运行完之后还会运行一个onLayout方法,要等到onLayout运行完之后才能得到具体的值,这个方法是指View所在屏幕上的位置,通过View.layout(int Left,int Top,int Right,int Bottom)改变View在屏幕上的大小(这个方法只是改变形状上的大小,实际的View并没有改变)。
以上文章参考:https://blog.csdn.net/qq_29951983/article/details/50571840
------------------------------------------我是分割线--------------------------------------------------
onMeasure
首先来看一下View的measure方法:
public final void measure(int widthMeasureSpec, int heightMeasureSpec) {
//...
onMeasure(widthMeasureSpec, heightMeasureSpec);
//...
}
注意到measure方法是final修饰的,也就是说这个方法是不允许重写的,而且方法内部主要是调用了onMeasure方法,测量工作交给onMeasure来做,所以我们在自定义View时总是重写其onMeasure方法。注意到传入的两个int类型的参数,widthMeasureSpec和heightMeasureSpec,这两个参数代表什么呢:
其高2位表示MODE,也就是测量的模式;低30位代表SIZE,测量的值。可以通过MeasureSpec.getMode()和MeasureSpec.getSize()得到它们。
以上文章参考:https://blog.csdn.net/lovejavasman/article/details/52221889