安卓中横竖屏切换和Activity的生命周期的处理

目前在做的一个项目是全部横屏的,之前的想法是认为在清单文件中对每一个Activity设置属性太麻烦,所以决定用代码实现,抽取到BaseActivity中的onResume方法里,代码如下:

  @Override
    protected void onResume() {
        super.onResume();
        if (getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        }
    }

后来在写项目的过程中,涉及到生命周期的重走。场景是这样的的:我在一个Activity的onResume方法中还要做某些事情,结果做了两遍。后来只好用那个麻烦的方法了,如果大家有什么好的方法可以做到让所有Activity都是横屏的,并且不会重复走生命周期,并且不需要对每个Activity都设置属性,希望大家可以告诉我。


接下来总结一下横竖屏切换的处理:

第一种:指定屏幕朝向(弊端:不能切换横竖屏了)

方法:在清单文件对应的Activity中配置android:screenOrientation=”landscape”(横屏,portrait是竖屏);

第二种: 设置屏幕旋转时不重新创建Activity 

在清单文件对应的Activity中配置android:configChanges="keyboardHidden|orientation|screenSize",这三个都要配置,否则高版本不会生效。  
横竖屏切换时会走Activity的onConfigurationChanged()方法,我们就可以在这个方法中进行一些处理

		@Override
		public void onConfigurationChanged(Configuration newConfig) {
			// 当新设置中,屏幕布局模式为横排时
			if(newConfig.orientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE){
				//TODO 某些操作
			}else{
				//TODO 某些操作
			}
			super.onConfigurationChanged(newConfig);
		}

第三种:代码配置横竖屏(会直接走两遍部分生命周期)

    @Override
    protected void onResume() {
        super.onResume();
        //竖屏是SCREEN_ORIENTATION_PORTRAIT
        if(getRequestedOrientation()!= ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE){
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        }
    }

我这个项目最后的选择是第一种做法,每个Activity都设置强制横屏。希望大家有好的建议可以告诉我。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值