目前在做的一个项目是全部横屏的,之前的想法是认为在清单文件中对每一个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都设置强制横屏。希望大家有好的建议可以告诉我。