转自: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)
分享到:
相关推荐
// 只需执行一次,在onWindowFocusChanged方法中才能获取到控件在屏幕中的坐标 if (init) { init =false; int[] position = new int[2]; messageIcon.getLocationOnScreen(position); messageCount = new ...
《Android开发艺术探索》笔记: 在Activity的onCreate()或者onResume()中去获得View的高度的时候不能正确获得宽度和高度信息...onWindowFocusChanged:View已经初始化完毕,宽高已经有了,需要注意onWindowFocusChanged
世界上第一个在不使用android 5.0+的styles.xml挂起状态栏的情况下着色状态栏的库如何实施: 下载LolTint.jar 实现LolTint.jar或导入lib项目在您的班级中添加此@Override public void onWindowFocusChanged(boolean...
Android SmoothTransition listview和gridview的item进入动画 ,每一个item可以自定义进入动画, 自定义SwitchAnimationUtil,当页面焦点变化的时候 onWindowFocusChanged(boolean hasFocus) 就 mSwitchAnimationUtil...
①在onWindowFocusChanged()方法中,设置为刷新状态为true @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); mSwipeRefreshLayout.setRefreshing(true);...
1.onWindowFocusChanged 这个方法会被调用多次,在View初始化完毕后会调用,当Activity的窗口得到焦点和失去焦点都会被调用一次(Activity继续执行和暂停执行时)。 @Override public void onWindowFocusChanged...
public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus) { getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View....
有时我们会有基于这样的需求,当Activity创建时,需要...第一种方式:重写Activity中的onWindowFocusChanged,当Activity获取到焦点的时候View已经绘制完成,也能获取到View的准确宽高了。同样的Dialog和PopupWindow
public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus && Build.VERSION.SDK_INT >= 19) { View decorView = getWindow().getDecorView(); decorView....
设置activity的theme属性隐藏标题栏和状态栏,然后在onWindowFocusChanged方法中调用方法 mLCDChangeLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);...
public void onWindowFocusChanged(boolean hasFocus){ if (customProgressDialog == null){ return; } ImageView imageView = (ImageView) customProgressDialog.findViewById(R.id.loadingImageView...