通过前面三篇总结,我们对View的measure有了一定的了解,那现在考虑一种情况,Activity启动的时候获取某个View的宽高值,该怎么取出呢?
我们现在onCreate或者onStart方法中实验一下, 我们在布局文件中添加一个TextView,命名为tv1。
在onCreate或者onStart中加入Log
Log.d("tvWidth", String.valueOf(tv1.getWidth()));
Log.d("tvHeight", String.valueOf(tv1.getHeight()));
可以发现,结果打印出来的都是0。这是为什么呢?因为View的measure过程和Activity周期并不同步执行。所以Activity执行到它的生命周期中的某个方法的时候,并不能保证View已经measure完毕。只要measure过程没有结束,那么直接获取到的宽高值都将为0。
那么有没有什么办法可以直接获取到View的宽高值呢?当然有,参考主席的《Android开发艺术探索》,总共有四种方法可以解决上面那个问题。
1. view.post(runnable)。
我们在onStart中加入以下代码:
tv1.post(new Runnable() {
@Override
public void run() {
Log