最近在做自定义组件,好头痛这个高度问题,就小小的整理一下。

下面整理几种获取高度的方法:

(1)int height = view.getHeight()固定高度的时候有效。比如你布局里用的dp,java代码里面不想转px,直接拿高度是一种好方法

(2)int height = getLayoutParams().height这个要onMeasure之后才能得到,也可以进行设置高度。

(3)int height = getMeasureHeight(),目前试的结果是只在onMeasure有效

(4)最近新学习的一个看上去比较神奇的方法:

  1. mHeaderView.getViewTreeObserver().addOnGlobalLayoutListener(
  2. new OnGlobalLayoutListener() {
  3. @Override
  4. public void onGlobalLayout() {

  5. mHeaderViewHeight = mHeaderView.getHeight();
  6. getViewTreeObserver()
  7. this);
  8. }
  9. });


这个方法是视图改变时能够调用onGlobalLayout(),从而获取真实高度,如果不需要多次获取,需要使用remove注销操作。

(5)onLayout,其实这个方法主要用于确定子布局的位置,系统会在onMeasure调用后调用它,onLayout和onMeasure不大喜欢将它作为测量,因为经常视图变化就会调用,必须加判断,不能移除。


其实这些都是很常用的方式,相信好多人不假思索的就能写出这些代码,只是提供自己参考的资料,不喜勿喷。