获取android控件的宽高

android 获取控件的高度相关的函数有getMeasuredHeightgetHeight,看下相应的源码

    public final int getHeight() {
        return mBottom - mTop;
    }
    /**
     * Like {@link #getMeasuredHeightAndState()}, but only returns the
     * raw width component (that is the result is masked by
     * {@link #MEASURED_SIZE_MASK}).
     *
     * @return The raw measured height of this view.
     */
    public final int getMeasuredHeight() {
        return mMeasuredHeight & MEASURED_SIZE_MASK;
    }

两者是不同的getMeasuredHeight()获得的是未经加工的测量高度,在控件完成了measure后,就可以获得这个数值,注意在onCreate函数中调用时返回值为0;这里可以得出获得高度的第一个方法,对于想在onCreate函数中就想获取控件的高度尤其有用,调用view.measure(0,0)方法,之后调用getMeasuredHeight(),就可以获得其测量高度,这里有一点需要注意一般调用view.measure(0,0)就可以了,不过如果由于受限于宽度导致如textview换行或则由于linearLayout由于含有weight导致换行什么的,则会导致getMeasuredHeight()获得的数值小与实际高度,解决办法是measure函数传入正确的宽度数值,一般来说如果想获得高度数值,那么宽度数值是固定可以获取的,则可以使用如下代码:

 int widthSpec = MeasureSpec.makeMeasureSpec(value, View.MeasureSpec.EXACTLY);
 view.measure(widthSpec, 0);
 int height = view.getMeasuredHeight();

value是实际的宽度;

根据源码控件layout后,getHeight的返回值才不是0,所以在onCreate中调用也没什么用,那在哪里调用呢;

        view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                int height = view.getHeight();
                if(0 != height) {
                    view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                }
            }
        });

以上也是获得高度的方法二了,使用OnGlobalLayoutListener
注意:getMeasuredHeight获得的高度总是小于getHeight,view的测量高度有可能超出屏幕,而超出的部分是不算在getHeight中的;

获得宽度的原理相同;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值