Android中获取手机屏幕的高度和宽度,我们知道在onCreate方法中获取到的值都是为0的,有人说可以在onClick方法中获取值,这个也是个方法 ,但在onWindowFocusChanged方法中可以直接获取到,而且有的时候场景的需要,就不得不在Activity渲染完成后立马获取值,这时候onWindowFocusChanged()方法就用到实处了,类似的有PopupWindow的显示,如果在onCreate方法中执行的话,会报没有token的异常,就是因为Activity没有渲染成功.

onWindowFocusChanged():当Activity的当前Window获得或失去焦点时会被回调此方法。当回调了这个方法时表示Activity是完全对用户可见的(只是可见,还一片黑呼呼的,有待draw..)。当对话框弹起/消失及Activity新创建及回退等都会调用此方法。

相比之下,onResume()方法更多的是指Activity进入了可见的状态,但只是状态,并不是真正的界面构建完成了。

demo

一个Activity只显示一个TestImageView,并重写TestImageView下的onMeasure()、onLayout()、onDraw()方法,并对其设置onGlobalLayout()监听,观察这几个方法与Activity的onResume()、onWindowFocusChanged()的调用顺序,如下:

ClipDrawableActivity onCreate() time=1376920332125  ClipDrawableActivity onResume() TestImageView.width=0 time=1376920332149  MainActivity onWindowFocusChanged hasFocus=false  ClipDrawableActivity TestImageView onMeasure()  ClipDrawableActivity TestImageView onMeasure()  ClipDrawableActivity TestImageView onMeasure()  ClipDrawableActivity TestImageView onMeasure()  ClipDrawableActivity TestImageView onLayout()  ClipDrawableActivity onGlobalLayout() TestImageView.width=736 time=1376920332185  ClipDrawableActivity onWindowFocusChanged() hasFocus=true TestImageView.width=736 time=1376920332187  ClipDrawableActivity TestImageView onMeasure()  ClipDrawableActivity TestImageView onMeasure()  ClipDrawableActivity TestImageView onLayout()  ClipDrawableActivity onGlobalLayout() TestImageView.width=736 time=1376920332194  ClipDrawableActivity TestImageView onDraw() 

Activity.oncreate()→Activity.onResume()→TestImageView.onMeasure()→TestImageView.onLayout()→onGlobalLayoutListener()→Activity.onWidnowFocusChanged()→.....→TextImageView.onDraw()

总结

至此,如果需要获取某个View的宽高,可以在onWindowFocusChanged()处直接获取即可,这比对某个view设置onGlobalLayoutListener的方式来获取方便了许此。又比如,对于需要读取本地文件记录来判断是否是第一次打开界面去提示文本图片的,也可以在此方法中去读取然后再显示在ui上。

我是天王盖地虎的分割线

更多相关文章

  1. Android(安卓)framework层JNI的使用浅析
  2. 【Android】Could not find XXX.apk!的解决方法
  3. 可以在Android上发定时短信
  4. Android(安卓)TabActivity中的子Tab Activity 无法正常 bindServ
  5. Android(安卓)4.4 webview 架构
  6. 设置背景图时防止图片拉伸的解决方法
  7. APK的安装过程及原理详解
  8. Android(安卓)进程和线程(二)
  9. Android中的线程和线程池

随机推荐

  1. Android(安卓)支持多屏幕机制
  2. android事件分发机制
  3. Android(安卓)Handler
  4. Android(安卓)SDK 1-23各版本代号和别名
  5. singleLine=”true” 和 maxLines=”1″
  6. Android(安卓)开发中遇到的 bug(6)
  7. java引入Android(安卓)NinePatch技术的意
  8. android sharedpreferences工具类
  9. Eclipse开发简易的Android服务器
  10. maven 学习笔记(二)-创建简单的eclipse+and