转自:http://www.xuebuyuan.com/1587193.html

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=1376920332125ClipDrawableActivity onResume() TestImageView.width=0 time=1376920332149MainActivity onWindowFocusChanged hasFocus=falseClipDrawableActivity TestImageView onMeasure()ClipDrawableActivity TestImageView onMeasure()ClipDrawableActivity TestImageView onMeasure()ClipDrawableActivity TestImageView onMeasure()ClipDrawableActivity TestImageView onLayout()ClipDrawableActivity onGlobalLayout() TestImageView.width=736 time=1376920332185ClipDrawableActivity onWindowFocusChanged() hasFocus=true TestImageView.width=736 time=1376920332187ClipDrawableActivity TestImageView onMeasure()ClipDrawableActivity TestImageView onMeasure()ClipDrawableActivity TestImageView onLayout()ClipDrawableActivity onGlobalLayout() TestImageView.width=736 time=1376920332194ClipDrawableActivity TestImageView onDraw()

其调用顺序为Activity.oncreate()→Activity.onResume()→
→TestImageView.onMeasure()→TestImageView.onLayout()→onGlobalLayoutListener()→
→Activity.onWidnowFocusChanged()→.....→
→TextImageView.onDraw()

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

更多相关文章

  1. Android开发之Java设计模式基础篇
  2. android之mina框架通信学习
  3. android reboot 功能的添加
  4. Android中ListView的onKeyDown、onKeyUp、onKeyMultiple事件的处
  5. React-Native:调用(Android)Native方法
  6. Android(安卓)UI开发 View自绘控件 分享
  7. Android(安卓)Activity之间切换出现短暂黑屏的处理方法
  8. android横竖屏切换(复制未整理)
  9. Android大图加载方法

随机推荐

  1. Android开发从入门到精通(项目案例版)——
  2. Android(安卓)2.0 平台的亮点
  3. android TextView selector点击样式改变
  4. android 更新版本号
  5. Android(安卓)ProgressBar控件理解
  6. 【Android(安卓)界面效果14】RelativeLay
  7. Android学习笔记-界面和数据存储以及一些
  8. Android---Hellow World
  9. android的启动过程
  10. 仿春雨医生 安卓app(android)