在Oncreat()方法中获取View的宽度和高度

正常情况下,在OnCreate()方法中直接获取View的宽度和高度取得值是0。
原因:当OnCreate()方法被调用时,会通过LayoutInflater将XML布局文件填充到
contentView。填充过程只包括创建视图,却不包括设置大小。那么,视图的大小
是如何指定的呢?
绘制布局由两个遍历过程组成:测量过程和布局过程。测量过程由measure()方法
完成,该方法从上而下遍历视图树,在递归遍历的过程中,每个视图都会向下层传递尺寸和规格
当方法结束时,每个视图都会保存各自的尺寸和规格。
布局过程由layout()方法完成,该方法也是有上而下遍历视图树,在遍历过程中,每个父视图通过
测量过程的结果定位所有子视图的位置信息。

结论:只有在整个布局绘制完毕后,视图才能得到自身的高和宽,这个过程发生在OnCreate()方法之后,因此
在此之前调用getHeight()和getWidth()方法返回的结果都是0.

解决方法就是可以使用,view的post()方法解决上述问题,该方法受到一个Runnable线程参数,并将其添加到消息
队列中。有趣的是Runnable线程会在UI线程中执行。代码如下:

protected void onCreate(Bundle savedInstanceState){
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);

   View view = findViewById(R.id.main_my_view);

   view.post(new Runnable(){
   @override
   public void run() {
      Log.d(TAG, "view has width :" + view.getWidth() + " and height: " + view.getHeight());
  }
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路遥知码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值