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

xiaoxiao2021-02-28  100

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

转载请注明原文地址: https://www.6miu.com/read-38238.html

最新回复(0)