android 横竖屏幕切换,Android 横竖屏切换总结

一.Android切换横竖屏

应用的横竖屏设置

应用的横竖屏设置主要是通过Activity的screenOrientation属性控制,属性值如下:

52aa3a2c0417

主要有以下两种方式设置screenOrientation属性值

静态设置,即在Mainfest文件中配置screenOrientation属性

动态设置,即调用Activity的setRequestedOrientation(@ActivityInfo.ScreenOrientation int requestedOrientation)方法设置screenOrientation属性值

以上两种方法,均可以通过改变screenOrientation属性值的方式配置屏幕方向属性,人为的限制屏幕可自动选择或者锁定横竖屏。只不过动态设置可以通过动态的改变屏幕方向属性值的方式,从而动态的设置屏幕方向

系统的横竖屏设置

系统横竖屏设置可以设置自动旋转(即应用界面根据系统自动旋转)或者锁定某一方向的屏幕

以三星手机为例:

52aa3a2c0417

自动旋转

52aa3a2c0417

锁定竖屏

综上,系统的设置和应用的属性共同控制了屏幕的横竖展示。

这里做了个简单的表格,列出一些常用系统横竖屏和应用横竖屏混合设置结果(自动旋转代表会根据手机设备的旋转而旋转):

screenOrientation属性值

default

sensor

protrait

landscape

系统自动旋转

自动旋转

自动旋转

锁定竖屏

锁定横屏

系统锁定竖屏

锁定竖屏

自动旋转

锁定竖屏

锁定横屏

总结:根据实际测试的结果可知,应用的属性约束优先级要大于系统设置的约束,只有应用属性screenOrientation属性值为默认值时(不设置),应用的横竖屏才受系统自动旋转设置约束。只要screenOrientation属性值不为默认值,应用界面的横竖屏切换只受当前Activity的screenOrientation属性控制。

二.Android横竖屏切换Activity生命周期

关于Android横竖屏切换Activity是否会销毁重建,这个由Activity的configChanges属性控制。当一个配置改变时Activity默认会销毁重建,但是如果这个属性声明了此项配置后,Activit就不会销毁重建,而是回调Activity的onConfigurationChanged方法。

configChanges的可配置属性如下:

52aa3a2c0417

横竖屏切换 - Activity销毁重建

对于android3.2(API13)及以后的系统,以下任意一种配置,横竖屏切换Activity的生命周期都会重新执行一次

(备注:关于部分资料说的不配置orientation属性切换竖屏会执行两次的结论,我在4.0之后的手机上测试都是只执行一次,不知道之前版本的系统是不是这样,待验证)

不配置configChanges属性

设置android:configChanges="orientation"

设置android:configChanges="orientation|keyboardHidden"(3.2系统之前的系统不会执行生命周期方法了)

实测结果:

52aa3a2c0417

可见以上三种配置,横竖屏切换时Activity均会销毁重建,Activity的生命周期都会重新执行一次

横竖屏切换 - Activity不销毁重建

配置android:configChanges="orientation|keyboardHidden|screenSize"可以控制Activity在横竖屏切换时不销毁重建

实测结果:

@Override

public void onConfigurationChanged(Configuration newConfig) {

super.onConfigurationChanged(newConfig);

int orientation = newConfig.orientation;

if (orientation == ORIENTATION_LANDSCAPE){

Log.i(TAG, "-------------横屏-------------");

}else {

Log.i(TAG, "-------------竖屏-------------");

}

Log.i(TAG, "onConfigurationChanged: "+orientation);

}

52aa3a2c0417

可见配置了android:configChanges="orientation|keyboardHidden|screenSize"横竖屏切换时Activity不会销毁重建,而是会回调Activity的onConfigurationChanged方法。这里需要注意的是,第一次切换时onConfigurationChanged方法会回调两次

总结:在遇到Android横竖屏切换的问题时,我们需要解决的问题主要有两个,布局的变化和数据的存储恢复。可以综合以上的属性设置达到最终自己想要的效果。

·

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值