Activty 横竖屏切换

一、生命周期

第一次启动:
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系统自己选择适当的方向,选择策略视具体设备的配置情况而定,因此不同的设备会有不同的方向选择;

你可能感兴趣的:(Activty 横竖屏切换)