Android(安卓)屏幕切换和onConfigurationChanged不调用的原因
Activity的生命周期大家都知道,通常我们会指定activity的屏幕方向,这样避免屏幕旋转改变后activity生命周期变化
android:screenOrientation="portrait"竖屏
android:screenOrientation="landscape"横屏
上面通过指定Activity显示屏幕方向,代码很方便也很多应用是这样做的,但是需求来时,需要应用自适应屏幕方向,这样我们就需要使用
android:configChanges这个属性了和在Activity重写onConfigurationChanged方法
例子:
android:configChanges="keyboardHidden|orientation"
@Overridepublic void onConfigurationChanged(Configuration newConfig) {// TODO Auto-generated method stubLog.i("UserInfoActivity", "onConfigurationChanged");if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {Log.i("TAG", "横屏");// do some things} else if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {Log.i("TAG", "竖屏");
// do some things
}super.onConfigurationChanged(newConfig);}其中上述的super.onConfigurationChanged(newConfitg);方法是必须的,不能去掉,否者会有异常
异常信息如下:
12-19 11:00:42.165: E/AndroidRuntime(20440): android.app.SuperNotCalledException: Activity ui.UserInfoActivity did not call through to super.onConfigurationChanged()
然而我们在实际使用时,系统版本大多不相同,在测试中本人在4.1系统中就出现了onConfigurationChanged方法不进入的情况,究其原因,在于
自从Android3.2(API13),screensize也开始跟着设备的横竖切换而改变。所以,在AndroidManifest.xml里设置的MiniSdkVersion或者
TargetSdkVersion属性大于等于13的情况下,如果你想阻止程序在运行时重新加载Activity,除了设置"orientation",你还必须设置"ScreenSize"。
解决方法:
AndroidManifest.xml中设置android:configChanges="orientation|keyboardHidden|screenSize"当然我们也可以不指定TargetSdkVersion版本来这么做,也能达到大家的要求
更多相关文章
- android:layout_gravity="bottom"不起作用问题
- Android(安卓)屏幕横竖切换详解
- Android(安卓)List divider显示不出来的问题
- Android(安卓)监听软键盘弹起和收起事件
- 【Android(安卓)Studio】Android(安卓)Studio 安装及设置
- Android(安卓)shell 创建 模拟器
- android 属性个人收集 android:visibility
- Android界面基本属性
- Android计算器布局