在onCreate方法中获取View的 width 和height
我们先看看直接获取的结果:
代码如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
View view = findViewById(R.id.rl_view);
Log.i("MainActivity", "---View-->>直接获取width:" + view.getWidth()+ " height:" + view.getHeight());
}
测试证实:直接获取是不行的,因为 布局还没有绘制完成。
那么有什么解决方法呢?
下面介绍View中post方法:
在post方法中需要传入一个Runnable线程参数,这个线程还是运行在UI线程中:
代码如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final View view = findViewById(R.id.rl_view);
Log.i("MainActivity", "---View-->>直接获取width:" + view.getWidth()+ " height:" + view.getHeight());
view.post(new Runnable() {
@Override
public void run() {
Log.i("MainActivity", "---View-->>线程中获取width:" + view.getWidth()+ " height:" + view.getHeight());
}
});
Log.i("MainActivity", "---View-->>第二次直接获取width:" + view.getWidth()+ " height:" + view.getHeight());
}
测试的结果如下:
大家会发现,执行Runnable中的Log代码比直接获取宽度的Log代码要慢0.14秒,这个时间里,Activity已经完成了布局。