动态获取View的高度

设置动态复View的高度宽度有以下两制种方法:  
1. getHeight() 方法这个方法必须要在View调用了onLayout方法后才能获得,为了监听onLayout方法,可以获得ViewTree观察者上的监听器来实现,具体代码为:

ViewTreeObserver viewTreeObserver = bottomMenu.getViewTreeObserver();
viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        //只获取一次高度后,移除监听器
        bottomMenu.getViewTreeObserver().removeGlobalOnLayoutListener(this);
        int bottomMenuHeight = bottomMenu.getHeight();
        Logger.d("bottomMenuHeight-update", "" + bottomMenuHeight);
    }
});

注意:关于removeGlobalOnLayoutListener这个方法过时,可以采用removeOnGlobalLayoutListener这个高API Level才支持的方法。

2. getMeasuredHeight() 方法  由方法的名字就可以得知这个方法必须要在View调用了onMeasure方法后才能获得,有一种快捷的方法可以通知系统主动测量View(调用onMeasure),

代码如下:bottomMenu.measure(0,0); //通知

int bottomMenuHeight = bottomMenu.getHeight();

注意:有些人使用measure(0,0)方法时抛空指针异常,这是因为view对象根节点的布局已经实现了onMeasure方法,比如RelativeLayout重写了onMeasure方法,可以换成LinearLayout这种没有重写此方法的布局,当然也可以在外再套一层LinearLayout,不过这样会增加布局层数,降低运行效率,这需要自行权衡。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值