Android在OnCreate中获取控件的宽度和高度的实现代码

逐梦北航

逐梦北航

2016-02-19 11:25

每个人都希望每天都是开心的,不要因为一些琐事扰乱了心情还,闲暇的时间怎么打发,关注图老师可以让你学习更多的好东西,下面为大家推荐Android在OnCreate中获取控件的宽度和高度的实现代码,赶紧看过来吧!
在Android中,有时需要对控件进行测量,得到的控件宽度和高度可以用来做一些计算。在需要自适应屏幕的情况下,这种计算就显得特别重要。另一方便,由于需求的原因,希望一进入界面后,就能得到控件的宽度和高度。

可惜的是,根据我的验证,利用网上转载的那些方法在OnCreate函数中获取到的仍然是0(希望搞技术的能自己验证过再转载),例如Measure方法之后调用getMeasuredWidth的值还是0。

原因是因为当OnCreate函数发生时,只是提供了数据初始化的机会,此时还没有正式绘制图形。而绘制图形在OnDraw中进行,此时计算又显得太晚。容易想到的办法是:希望能在程序刚刚测量好某个指定控件后,拿到它的宽度和高度立刻进行计算或数据初始化。这就需要有一个方法来监听到这个事件的发生,幸好Android提供了这样的机制,利用View类中的getViewTreeObserver方法,可以获取到指定View的观察者,在绘制控件前的一刹那进行回调,这样速度上又不耽误,得到的数据由是准确的,但此方法在之后可能会被反复调用,因此需要加入限制,普通需求下,只计算一次就够了,代码如下(此代码在OnCreate回调函数中验证通过,实时上,因为它是监听器,所以发生事件时已经和OnCreate无关了):

代码如下:

layout = (MetroLayout) findViewById(R.id.layout);
ViewTreeObserver vto = layout.getViewTreeObserver();

vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener()
{
public boolean onPreDraw()
{
if (hasMeasured == false)
{

int height = metroLayout.getMeasuredHeight();
int width = metroLayout.getMeasuredWidth();
//获取到宽度和高度后,可用于计算

hasMeasured = true;

}
return true;
}
});
展开更多 50%)
分享

猜你喜欢

Android在OnCreate中获取控件的宽度和高度的实现代码

编程语言 网络编程
Android在OnCreate中获取控件的宽度和高度的实现代码

Android获取手机配置信息具体实现代码

编程语言 网络编程
Android获取手机配置信息具体实现代码

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

android获取屏幕的长与宽实现代码(手写)

编程语言 网络编程
android获取屏幕的长与宽实现代码(手写)

android手机获取gps和基站的经纬度地址实现代码

编程语言 网络编程
android手机获取gps和基站的经纬度地址实现代码

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

jquery 分页控件实现代码

Web开发
jquery 分页控件实现代码

android panellistview 圆角实现代码

编程语言 网络编程
android panellistview 圆角实现代码

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

win10已发送邮件不能同步0x80070032错误怎么办

win10已发送邮件不能同步0x80070032错误怎么办

彻底关闭win10系统IE浏览器的技巧

彻底关闭win10系统IE浏览器的技巧
下拉加载更多内容 ↓