在Activity生命周期函数中
onCreate(...)
onResume()
获取不到View的实际大小。
```
view.getWidth()
view.getHeight()
```
根本原因在于控件还没有完成绘制。
系统将何时绘制完View时呢?
将一个runnable添加到Layout队列中:View.post(new Runnable())
简单地说,在Runnable中实现run方法,View的measure、layout等事件后触发run
View.post(new runnable(
//这里实现回调方法
));
UI事件队列会按顺序处理事件。
在setContentView()被调用后,事件队列中会包含一个要求重新layout的message,所以任何你post到队列中的东西都会在Layout发生变化后执行。
final View view=//smth;
view.post(new Runnable() {
@Override
public void run() {
view.getHeight();//height is ready
}
});