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();
    }
});

猜你喜欢

转载自blog.csdn.net/llengnuo/article/details/76736733