Android开发使用活动嵌套多个片段实现横竖屏切换功能的方法

  

本文实例讲述了Android开发使用活动嵌套多个片段实现横竖屏切换功能的方法。分享给大家供大家参考,具体如下:

  

  

 Android开发使用活动嵌套多个片段实现横竖屏切换功能的方法

  

 Android开发使用活动嵌套多个片段实现横竖屏切换功能的方法

  

  

近期项目遇到个横竖屏切换的问题,较为复杂,在此记之。

  

1,活动中竖屏嵌套3个片段,本文简称竖屏FP1, FP2, FP3。
  2,其中竖屏FP1与FP2可以切换为横屏的FL1, FL2,即竖屏FP1切换到对应的横屏FL1,竖屏FP2对应切换到横屏FL2。
  3,FP3不允许横竖屏切换。
  4,竖屏FP1 FP2, FP3用:viewpage实现左右滑动切换。
  5、横屏的FL1, FL2用布局中的切换按扭实现左右切换,不允许滑动切换。

  

看到这需求有点儿晕菜了吧! ! !呵呵! ! !

  

(一)先说说我走过的弯的路,将横竖屏切换在一个活动中实现。

  

(1),在一个活动中实现横竖屏切换难在什么地方呢?主要是横竖屏切换,活动有它自己的生命周期,片段也有它的生命周期,而且活动的生命周期左右着碎片的生命周期。最复杂的地方是,首次横竖屏切换时,活动的<代码> onDestory() 方法会执行,在执行此方法之前,片段的<代码> onDestoryView() 首先会获得执行,接着会执行<代码> onCreateView() 方法。而首次切换到横屏时,活动的<代码> onCreate() 方法会执行,接着横屏FL1的<代码> onCreateView() 方法又会执行,这样的话,片段的布局就会发生覆盖。(这是我在做的时候发现的问题,不知道其他人是否遇到)。
  (2),在一个活动中横竖屏切换,竖屏布局与横屏布局不一样,本文示例竖屏为活动中嵌套3个片段,横屏嵌套2个片段,首先会有很多页面状态需要记录,其次就是活动与片段的生命周期关系问题,确实挺复杂,控制这里面的状态,只有做过的人才知道有多苦。

  

(二)可取的办法,将横竖屏切换在两个活动中实现

  

  

1,首先当然是要让两个活动能够横竖切,这里首先需要在AndroidManifest.xml中配置两个活动能够横竖切换,配置如下:

        & lt;活动   android: name=" .ActivityPort "   面向android: configChanges=" | keyboardHidden |拉”   android: label=" @string/app_name”   android: windowSoftInputMode=" stateAlwaysHidden | adjustPan”比;   & lt; intent-filter>   & lt;行动android: name=" android.intent.action.MAIN "/比;   & lt;类别android: name=" android.intent.category.LAUNCHER "/比;   & lt;/intent-filter>   & lt;/activity>   & lt;活动   android: name=" .ActivityLand "   面向android: configChanges=" | keyboardHidden |拉”   android: label=" @string/app_name”   android: windowSoftInputMode=" stateAlwaysHidden | adjustPan”/比;      之前      

可点击此处查看较为详细的Android权限设置说明

  

2,竖屏活动的切换到横屏活动的时候,通过意图跳转到横屏的活动,然后将当前活动给完成()掉。反之也是一样的逻辑。那么现在面临的一个问题是什么,这个跳转写在什么地方,写在<代码> onDestory() 方法中显然是不合适的,因为这个方法在横竖切的时候会始终执行,当你在按回退键返回到上一个页面时,同样会执行这个方法,这样跳转的话,就会死循环,会总是打开页面。这时候就想到了活动的<代码> onConfigurationChanged() 方法.Google官网说横竖屏切换不希望大家用这个方法实现横竖屏切换,但是遇到了这样怪异的需求,不得不使用。上代码:

        @Override   公共空间>   包com.example.screenswitch;   进口java.util.ArrayList;   进口并不知道;   进口android.app.Activity;   进口android.content.Intent;   进口android.content.pm.ActivityInfo;   进口android.content.res.Configuration;   进口android.os.Bundle;   进口android.support.v4.app.Fragment;   进口android.support.v4.app.FragmentActivity;   进口android.support.v4.app.FragmentManager;   进口android.support.v4.app.FragmentTransaction;   进口android.support.v4.view.ViewPager;   进口android.view.KeyEvent;   进口com.example.screenswitch.adapter.ChartFragmentPagerAdapter;   进口com.example.screenswitch.application.DataCache;   进口com.example.screenswitch.fragments.Fragment1;   进口com.example.screenswitch.fragments.Fragment2;   进口com.example.screenswitch.fragments.Fragment3;   公开课ActivityPort延伸FragmentActivity {   私有静态最终字符串标签=癆ctivityPort”;/* *页面类型——竖屏1 * */公共静态最终int PORT_PAGE_1=1;/* *页面类型——竖屏2 * */公共静态最终int PORT_PAGE_2=2;/* *页面类型——竖屏3 * */公共静态最终int PORT_PAGE_3=3;   私人:viewpage vpChartPage;   私人Fragment1 Fragment1;   私人Fragment2 Fragment2;   私人Fragment3 Fragment3;/* *竖屏FragmentManager * */私人FragmentManager portfragmentManager;/* * fragmentTransaction * */私人FragmentTransaction mFragmentTransaction;/* *片段集合* */私人List

Android开发使用活动嵌套多个片段实现横竖屏切换功能的方法