一、生命周期
第一次启动:
onCreate()>onStart()o>onResume()
第一次切换
onPause()>onStop()>onDestory()>onCreate()>onStart()>onResume()
第二次切换
onPause()>onStop()>onDestory()>onCreate()>onStart()>onResume()
从上面的生命周期可以看出,在做切换时,Activity做的动作是把原页面销毁再重新创建一个新页面。
二、设置
1、在xml中设置
强制竖屏:android:screenOrientation="portrait"
强制横屏:android:screenOrientation="landscape"
注意:在不指定时,是跟随重力切换的。如果设置为android:screenOrientation="sensor",那么不管系统设置是否能跟随重力切换都可以跟随重力切换横竖屏。
2、在代码中指定
切换横屏:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
切换竖屏:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
注意:如果你使用了setRequestedOrientation方法,那么就不会跟随重力切换了,无法设置回来。
三、Activity重建问题
1.如果不想让Activity重新创建,在Android3.2之前添加:android:configChanges="orientation|keyboardHidden"
在Android3.2之后因为屏幕像素值也会跟随改变,需要添加:android:configChanges="screenSize|orientation|keyboardHidden",Activity就不会重建走生命周期,只会执行onConfigurationChanged()方法
onConfigurationChanged()方法
当设置android:configChanges="screenSize|orientation|keyboardHidden"才会触发该方法。
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
//可以在这做你切换时需要的操作
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Logger.e("当前屏幕为横屏");
} else {
Logger.e("当前屏幕为竖屏");
}
}
//获取屏幕方向 1竖屏 2横屏
int screenNum = getResources().getConfiguration().orientation;
screenOrientations属性说明
landscape
横屏,显示时宽度大于高度;
portrait
竖屏, 显示时高度大于 宽 度 ;
user
用户当前的首选方向;
behind
继承Activity堆栈中当前Activity下面的那个Activity的方向;
sensor
由物理感应器决定显示方向,它取决于用户如何持有设备,当 设备 被旋转时方向会随之变化——在横屏与竖屏之间;
nosensor
忽略物理感应器——即显示方向与物理感应器无关,不管用户如何旋转设备显示方向都不会随着改变("unspecified"设置除外);
unspecified
未指定,此为默认值,由Android系统自己选择适当的方向,选择策略视具体设备的配置情况而定,因此不同的设备会有不同的方向选择;