Android中View的宽高测量结果为0的原因和解决方法

     在View的宽高测量结果中,有时你会发现明明可以实现,但检测的宽高结果为0。所以这里介绍了四种方法来让View的检测宽高结果显示出来。

1.可能没有调用View.OnMeasure()方法。所以测量的结果为0。这里通过调用View.OnMeasure()得到测量的结果。

mText.measure(0,0);
int widthMeasureSpec = mText.getMeasuredWidth();
Toast.makeText(MainActivity.this, "widthMeasureSpec=" + widthMeasureSpec, Toast.LENGTH_SHORT).show();

2.通过View.ViewTreeObserver()的方法,通过监听树的发生变化而实现了测量的结果。

mText.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        mText.getViewTreeObserver().dispatchOnPreDraw();
        int height = mText.getHeight();
        Toast.makeText(MainActivity.this, "height=" + height, Toast.LENGTH_SHORT).show();

    }

3.通过实现View.onWindowFocusChanged()方法,通过获取到控件的焦点来实现了测量的结果。

@Override
 public void onWindowFocusChanged(boolean hasFocus) {
     super.onWindowFocusChanged(hasFocus);
     int height = mText.getHeight();
     Toast.makeText(MainActivity.this, "height=" + height, Toast.LENGTH_SHORT).show();
 }

4.通过View.post()方法来实现,其实这个方法内部实现的Handle的消息队列MessageQueue和Message方法。所以当上面的控件或Activity创建和初始化完成后,才开始测量结果

mText.post(new Runnable() {
    @Override
    public void run() {
        int height = mText.getHeight();
        Toast.makeText(MainActivity.this, "height=" + height, Toast.LENGTH_SHORT).show();
    }
});

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值