一、方法:
有三种方法让应用旋转,一种是打开手机中的“屏幕旋转”功能,一是在程序中添加屏幕旋转的按钮(即动态实现),另一种是在AndroidManifest.xml中对Activity进行配置,设定活动启动时的屏幕显示方式(即静态实现)。这里我们主要讲后两种方法。
二、动态的实现屏幕旋转:
这里我们的做法也很简单,就是在按键响应部分添加判断逻辑:如果当前屏幕是横屏显示的,就通过setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
强制设置为横屏;
否则,就通过调用setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
强制设置为竖屏
button_changeScreen.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT == getRequestedOrientation())
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
else
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
});
细心的你会发现,ActivityInfo下有
- SCREEN_ORIENTATION_LANDSCAPE
- SCREEN_ORIENTATION_SENSOR_LANDSCAPE
- SCREEN_ORIENTATION_USER_LANDSCAPE
- SCREEN_ORIENTATION_REVERSE_LANDSCAPE
四种不同的横屏显示方法,相应的也有四种不同的竖屏显示方法,它们之间有什么区别呢?
①答案其实很简单,以横屏显示为例,SCREEN_ORIENTATION_LANDSCAPE就是直接改变为横屏显示(这个方向是固定的一个方位)。
②而SCREEN_ORIENTATION_USER_LANDSCAPE虽然也是横屏显示,但是它会受系统设置的影响,比如用户打开了“屏幕旋转”功能,那么此时如果用户在横屏方向上调整方位,屏幕也会跟着变动,再次翻转,屏幕还是会翻转。
③SCREEN_ORIENTATION_SENSOR_LANDSCAPE会根据当前屏幕在横屏方向上的 方位进行横屏变换,效果和SCREEN_ORIENTATION_USER_LANDSCAPE打开“屏幕旋转”时一样。
④SCREEN_ORIENTATION_REVERSE_LANDSCAPE比较简单,就是旋转的方向和SCREEN_ORIENTATION_LANDSCAPE相反。
注意:屏幕的动态旋转是 无视 AndroidManifest.xml中关于屏幕显示方向的设置的。
三、实现屏幕静态旋转:
只需要在AndroidManifest.xml对应的Activity中添加android:screenOrientation=”landscape”或android:screenOrientation=”portrait” 就能达到横屏显示或竖屏显示的作用
android:screenOrientation="landscape"//横屏显示
android:screenOrientation="portrait" //竖屏显示
设置后不会受系统“屏幕旋转”功能的影响。
四、生命周期:
事实上,动态地对屏幕进行旋转其实是销毁活动并重新加载的过程,有些时候会导致不必要的麻烦,那么有没有不销毁活动而实现横竖屏切换的方法呢?
那就需要添加下面这样一段话:
android:configChanges="orientation|screenSize"
这样修改后,切换横竖屏的时候,活动调用onConfigurationChanged而不是重新加载活动了。