安卓开发之屏幕旋转

一、方法:

有三种方法让应用旋转,一种是打开手机中的“屏幕旋转”功能,一是在程序中添加屏幕旋转的按钮(即动态实现),另一种是在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下有

  1. SCREEN_ORIENTATION_LANDSCAPE
  2. SCREEN_ORIENTATION_SENSOR_LANDSCAPE
  3. SCREEN_ORIENTATION_USER_LANDSCAPE
  4. 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而不是重新加载活动了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值