您的位置:首页 > 移动开发 > Android开发

Android下动态获取View的高度或宽度

2017-04-01 10:51 435 查看
Android下View必须实现
onMeasure
onLayout
onDraw
三个方法,要动态获取View的高度(或宽度)就必须要理解这三个方法的调用的时间。







两个方法的使用


getHeight() 方法

这个方法必须要在View调用了onLayout方法后才能获得,为了监听onLayout方法,可以获得ViewTree观察者上的监听器来实现,具体代码为:
view.getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener(){

@override
public void onGlobalLayout(){
//只需要获取一次高度,获取后移除监听器
view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
//这里高度应该定义为成员变量,定义为局部为展示代码方便
int height = view.getHeight();
}

});








getMeasuredHeight() 方法

由方法的名字就可以得知这个方法必须要在View调用了onMeasure方法后才能获得,有一种快捷的方法可以通知系统主动测量View(调用onMeasure),代码如下:
view.measure(0,0);//通知系统主动测量
int height =  view.getMeasuredHeight();
1
2
1
2

注意:有些人使用measure(0,0)方法时抛空指针异常,这是因为你的view对象根节点的布局已经实现了onMeasure方法,比如RelativeLayout重写了onMeasure方法,可以换成LinearLayout这种没有重写此方法的布局。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息