getRequestOrientation() 或者 getResource().getConfiguration().orientation 可以得到当前activity是处于横屏还是竖屏
setRequestOrientation() 可以设置当前的activity的横竖屏
例:如果是横屏 设置为竖屏
if(getRequestOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANSCAPE){
setRequestOrientation(ActvitiyInfo.SCREEN_ORIENTATION_PORTRAIT);
}
if(getResource().getConfiguration().orientation == Configuration.ORIENTATION_LANCSCAPE){
}
可以在activity的属性 android:screenOrientation="" 中设置当前activity的固定为横屏或者竖屏, 值可取 landscape|portrait
横竖屏切换的生命周期:
当前Activity产生事件弹出Toast和AlertDialog的时候Activity的生命
周期不会有改变
以下内容为转载内容:
1、新建一个Activity,并把各个生命周期打印出来
2、运行Activity,得到如下信息
onCreate-->
onStart-->
onResume-->
3、按crtl+f12切换成横屏时
onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->
4、再按crtl+f12切换成竖屏时,发现打印了两次相同的log
onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->
onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->
5、修改AndroidManifest.xml,把该Activity添加
android:configChanges="orientation",执行步骤3
onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->
6、再执行步骤4,发现不会再打印相同信息,但多打印了一行onConfigChanged
onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->
onConfigurationChanged-->
7、把步骤5的android:configChanges="orientation" 改成
android:configChanges="orientation|keyboardHidden",执行步骤3,就只打印
onConfigChanged
onConfigurationChanged-->
8、执行步骤4
onConfigurationChanged-->
onConfigurationChanged-->
总结:
1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,
切横屏时会执行一次,切竖屏时会执行两次
2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调
用各个生命周期,切横、竖屏时只会执行一次
3、设置Activity的android:configChanges="orientation|keyboardHidden"时,
切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法
但自己测试后结果为: 切换横竖屏只走一遍生命周期: onSaveInstanceState()->onPause()->onStop()->onDestroy()->onCreate()->onStart()->onRestoreInstanceState()->onResume() 而不是当横屏切换到竖屏走两遍 ,不知道怎么回事
当设置activity configChanges="orientation" 或者设置 configChanges="orientation|keyboardHidden"时生命周期为:
无论是横屏切换竖屏或者竖屏切换横屏都只走一遍onConfigurationChanges(),不走其它生命周期