天天看点

android全局屏幕自动旋转,Android屏幕旋转

很久没有写文章了,找个时间整理下Android简单的屏幕旋转的生命周期和正确的竖屏锁定设置

生命周期

启动Activity会执行如下方法:

onCreate –> onStart –> onResume

之后旋转屏幕,则Activity会被销毁并重新创建,之后便会执行如下方法:

onPause –> onSaveInstanceState –> onStop –> onDestroy

–> onCreate –> onStart–>onRestoreInstanceState –> onResume

在AndroidManifest配置文件里声明android:configChanges属性

默认屏幕旋转会重新创建,当然可以通过在配置文件里加上如下代码:

android:configChanges="keyboardHidden|orientation|screenSize"(sdk>13时需加上screenSize)

这个时候再旋转屏幕便不会销毁Activity,这时候再旋转屏幕可以看到只会执行onConfigurationChanged方法,有什么在屏幕旋转的逻辑可以重写这个方法.

public void onConfigurationChanged(Configuration newConfig) {

if (newConfig.orientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {

// TODO:

}

super.onConfigurationChanged(newConfig);

}

屏幕纵向固定

android:name=".sign.region.RegionActivity"

android:label="@string/region_switch"

android:screenOrientation="portrait" />

android:ConfigChanges:在Activity中设置相应属性,当该Activity中配置的相应状态发生改变,则不交给系统处理(系统处理:销毁Activity并重新启动Activity),而是系统回调onConfigurationChanged()方法,我们在onConfigurationChanged()方法中对指定状态的改变进行捕捉,并自定义处理。

设置方法:将下列字段用“|”符号分隔开,例如:“locale|navigation|orientation”

“mcc“ 移动国家号码,由三位数字组成,每个国家都有自己独立的MCC,可以识别手机用户所属国家。

“mnc“ 移动网号,在一个国家或者地区中,用于区分手机用户的服务商。

“locale“ 所在地区发生变化。

“touchscreen“ 触摸屏已经改变。(这不应该常发生。)

“keyboard“ 键盘模式发生变化,例如:用户接入外部键盘输入。

“keyboardHidden“ 用户打开手机硬件键盘

“navigation“ 导航型发生了变化。(这不应该常发生。)

“orientation“ 设备旋转,横向显示和竖向显示模式切换。

“fontScale“ 全局字体大小缩放发生改变

从Android 3.2(API 13),在设置Activity的android:configChanges="orientation|keyboardHidden"后,还是一样会重新调用各个生命周期的。因为screen size也开始跟着设备的横竖切换而改变。所以,在AndroidManifest.xml里设置的MiniSdkVersion和 TargetSdkVersion属性大于等于13的情况下,如果你想阻止程序在运行时重新加载Activity,除了设置"orientation",你还必须设置"ScreenSize"。

android:screenOrientation参数设置

android:screenOrientation设定该活动的方向, 该值可以是任何一个下面的字符串:

"unspecified":默认值. 由系统选择显示方向. 在不同的设备可能会有所不同.

"landscape":橫向

"portrait":纵向

"user":用戶当前的首选方向

"behind":与在活动堆栈下的活动相同方向

"sensor":根据物理方向传感器确定方向. 取决于用戶手持的方向, 当用戶转动设备, 它跟隨改变.

"nosensor":不经物理方向传感器確定方向. 该传感器被忽略, 所以当用戶转动设备, 显示不會跟隨改变. 除了这个区别,系統选择使用相同的政策取向对于“未指定”设置. 系統根据“未指定”("unspecified")设定选择相同显示方向.

竖屏锁定正确姿势

android:name=".sign.region.RegionActivity"

android:configChanges="orientation|keyboardHidden|screenSize"

android:label="@string/region_switch"

android:screenOrientation="portrait" />