Android正确获取View的大小方法

一般在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

}

});

其它方式


偶尔能获取成功,说明回调onResume()方法时,View不一定绘制完成,但是onResume()回调时,界面已经展示出了,为什么View还未绘制完成?

View绘制完成,回调onWindowFocusChanged(),在该方法中获取View的大小。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值