最近在做自定义组件,好头痛这个高度问题,就小小的整理一下。
下面整理几种获取高度的方法:
(1)int height = view.getHeight()固定高度的时候有效。比如你布局里用的dp,java代码里面不想转px,直接拿高度是一种好方法
(2)int height = getLayoutParams().height这个要onMeasure之后才能得到,也可以进行设置高度。
(3)int height = getMeasureHeight(),目前试的结果是只在onMeasure有效
(4)最近新学习的一个看上去比较神奇的方法:
- mHeaderView.getViewTreeObserver().addOnGlobalLayoutListener(
- new OnGlobalLayoutListener() {
- @Override
- public void onGlobalLayout() {
- mHeaderViewHeight = mHeaderView.getHeight();
- getViewTreeObserver()
- this);
- }
- });
这个方法是视图改变时能够调用onGlobalLayout(),从而获取真实高度,如果不需要多次获取,需要使用remove注销操作。
(5)onLayout,其实这个方法主要用于确定子布局的位置,系统会在onMeasure调用后调用它,onLayout和onMeasure不大喜欢将它作为测量,因为经常视图变化就会调用,必须加判断,不能移除。
其实这些都是很常用的方式,相信好多人不假思索的就能写出这些代码,只是提供自己参考的资料,不喜勿喷。