Android屏幕旋转之横屏竖屏切换的实现

  

刚实现了应用程序内手机横、竖放置时,屏幕横/竖屏的切换。记录一下中间需要的关键信息和实现过程。

  

开门见山的说,实现屏幕自动/手动旋转的方式有两种:

  

一种是在工程的代码中定义,这种方式在横竖屏切换时执行的操作是:销毁当前活动——根据新的屏幕尺寸重建活动。如果不进行数据存储的操作,在切换的过程中活动中的数据会丢失。

  

另一种是在工程的AndroidManifest.xml中定义,这种定义的方式在某些情况下可以实现“不销毁需要横竖屏的活动”,因为这种方式不会销毁活动后重建活动,因此活动的数据不会丢失。

  

接下来分别介绍这两种实现方式:

  


  

  

在需要横屏的活动中的onCreate方法内添加如下语句,并且要求该语句位于onCreate方法内setContentView(* *)语句之前。

        setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);      

上条语句中,常数SCREEN_ORIENTATION_FULL_SENSOR是决定屏幕如何旋转的参数。总结所有的参数对应的功能:

  

           参数   功能               SCREEN_ORIENTATION_BEHIND   继承活动堆栈中当前活动下面的那个活动的方向         SCREEN_ORIENTATION_FULL_SENSOR   由重力传感器决定0/90/180/270°         SCREEN_ORIENTATION_FULL_USER            SCREEN_ORIENTATION_LANDSCAPE   始终横屏         SCREEN_ORIENTATION_PORTRAIT   始终竖屏         SCREEN_ORIENTATION_LOCKED   锁定屏幕方向         SCREEN_ORIENTATION_NOSENSOR   关闭重力传感器对横/竖屏的影响         SCREEN_ORIENTATION_REVERSE_LANDSCAPE   另一个方向的横屏         SCREEN_ORIENTATION_REVERSE_PORTRAIT   另一个方向的竖屏(倒拿手机)         SCREEN_ORIENTATION_SENSOR   重力传感器影响屏幕的方向0/90/270°         SCREEN_ORIENTATION_SENSOR_LANDSCAPE   始终横屏,由重力传感器决定是哪个方向的横屏         SCREEN_ORIENTATION_SENSOR_PORTRAIT   始终竖屏,由重力传感器决定是哪个方向的竖屏         SCREEN_ORIENTATION_UNSPECIFIED   不指定方向,使用默认方向         SCREEN_ORIENTATION_USER   由用户和重力传感器共同决定,详见文本末端         SCREEN_ORIENTATION_USER_LANDSCAPE   用户和重力传感器共同决定是哪个方向的横屏         SCREEN_ORIENTATION_USER_PORTRAIT   用户和重力传感器共同决定是哪个方向的竖屏         UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW   当屏幕较窄时导航栏有一部分会显示在底部            

  

,由于该方式下横/竖屏切换时,对应的活动的数据会丢失,可以在对应的活动中重写如下两个方法,来保证数据不丢失:

        @Override   保护空白>   面向android: configChanges=" | keyboardHidden |拉”      
      <李>配置configChanges为以上配置时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法.Activity中的数据不会被销毁。   <李>不配置configChanges或配置configChanges为非以上配置时,切屏会重新调用当前活动的各个生命周期.Activity中的数据会被销毁。   
  

给出示例代码如下:

        & lt;活动android: name=" .com.cdsn.SearchActivity "   ……   android: screenOrientation=按衅鳌?   面向android: configChanges=" keyboardHidden | |拉”/在      

上述代码中的android: screenOrientation所有可能的参数配置如下。

  

           值   描述               未指明的   默认值。系统自动选择屏幕方向         后面   跟活动堆栈中的下面一个活动的方向一致         景观   横屏方向,显示的宽比高长         肖像   竖屏方向,显示的高比宽长         传感器   由设备的物理方向传感器决定,如果用户旋转设备,这屏幕就会横竖屏切换         nosensor   忽略物理方向传感器,这样就不会随着用户旋转设备而横竖屏切换了(“不明”设置除外)         用户   用户当前首选的方向         reverseLandscape   API 9以上,反向横屏         reversePortrait   API 9以上,反向竖屏         sensorLandscape   API 9以上,横屏,但是可以根据物理方向传感器来切换正反向横屏         sensorPortrait   API 9以上,竖屏,但是可以根据物理方向传感器来切换正反向竖屏         fullSensor   API 9以上,上下左右四个方向,由物理方向传感器决定         锁着的   18以API上,锁死当前屏幕的方向            

Android屏幕旋转之横屏竖屏切换的实现