`
dawuafang
  • 浏览: 1105765 次
文章分类
社区版块
存档分类
最新评论

onWindowFocusChanged重要作用

 
阅读更多

转自:http://www.cnblogs.com/lijunamneg/archive/2013/01/19/2867532.html

Activity生命周期中,onStart, onResume, onCreate都不是真正visible的时间点,真正的visible时间点是onWindowFocusChanged()函数被执行时。
译注:从onWindowFocusChanged被执行起,用户可以与应用进行交互了,而这之前,对用户的操作需要做一点限制。

比如我们在做OTT项目时候,我们就是在这onWindowFocusChanged来获取主按键的具体位置和宽高的,而在其他标准生命周期的接口中调用都是获取不到的,比如在onResume,onStart中都获取不到信息。

这个onWindowFocusChanged指的是这个Activity得到或者失去焦点的时候 就会call。。
也就是说 如果你想要做一个Activity一加载完毕,就触发什么的话 完全可以用这个!!!

使用一个view的getWidth() getHeight() 方法来获取该view的宽和高,返回的值却为0。
如果这个view的长宽很确定不为0的话,那很可能是你过早的调用这些方法,也就是说在这个view被加入到rootview之前你就调用了这些方法,返回的值自然为0.
解决该问题的方法有很多,主要就是延后调用这些方法。可以试着在onWindowFocusChanged()里面调用这些方法,验证时可以获取到View的宽高的。


相关执行打印:
1: entry: onStart---->onResume---->onAttachedToWindow----------->onWindowVisibilityChanged--visibility=0---------->onWindowFocusChanged(true)------->

2. exit: onPause---->onStop---->onWindowFocusChanged(false) ---------------------- (lockscreen)

3. exit : onPause----->onWindowFocusChanged(false)-------->onWindowVisibilityChanged--visibility=8------------>onStop(to another activity)


分享到:
评论

相关推荐

    仿QQ气泡拖动删除

    // 只需执行一次,在onWindowFocusChanged方法中才能获取到控件在屏幕中的坐标 if (init) { init =false; int[] position = new int[2]; messageIcon.getLocationOnScreen(position); messageCount = new ...

    Android 获得View宽高的几种方式总结

    《Android开发艺术探索》笔记: 在Activity的onCreate()或者onResume()中去获得View的高度的时候不能正确获得宽度和高度信息...onWindowFocusChanged:View已经初始化完毕,宽高已经有了,需要注意onWindowFocusChanged

    LolTint:创新方式来着色您的android 5.0 +

    世界上第一个在不使用android 5.0+的styles.xml挂起状态栏的情况下着色状态栏的库如何实施: 下载LolTint.jar 实现LolTint.jar或导入lib项目在您的班级中添加此@Override public void onWindowFocusChanged(boolean...

    Android SmoothTransition listview和gridview的item进入动画.zip

    Android SmoothTransition listview和gridview的item进入动画 ,每一个item可以自定义进入动画, 自定义SwitchAnimationUtil,当页面焦点变化的时候 onWindowFocusChanged(boolean hasFocus) 就 mSwitchAnimationUtil...

    Android实现SwipeRefreshLayout首次进入自动刷新

    ①在onWindowFocusChanged()方法中,设置为刷新状态为true @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); mSwipeRefreshLayout.setRefreshing(true);...

    Android中获取控件宽高的4种方法集合

    1.onWindowFocusChanged 这个方法会被调用多次,在View初始化完毕后会调用,当Activity的窗口得到焦点和失去焦点都会被调用一次(Activity继续执行和暂停执行时)。 @Override public void onWindowFocusChanged...

    android 全屏去掉底部虚拟导航栏的方法

    public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus) { getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View....

    4种Android获取View宽高的方式

    有时我们会有基于这样的需求,当Activity创建时,需要...第一种方式:重写Activity中的onWindowFocusChanged,当Activity获取到焦点的时候View已经绘制完成,也能获取到View的准确宽高了。同样的Dialog和PopupWindow

    Android状态栏微技巧(推荐)

    public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus && Build.VERSION.SDK_INT >= 19) { View decorView = getWindow().getDecorView(); decorView....

    activity全屏实现沉浸式效果,并且单独触摸不会弹出虚拟按键的方法

    设置activity的theme属性隐藏标题栏和状态栏,然后在onWindowFocusChanged方法中调用方法 mLCDChangeLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);...

    自定义dialog

    public void onWindowFocusChanged(boolean hasFocus){ if (customProgressDialog == null){ return; } ImageView imageView = (ImageView) customProgressDialog.findViewById(R.id.loadingImageView...

Global site tag (gtag.js) - Google Analytics