Android横竖屏切换总结

作者: 金馆长说 | 来源:发表于2017-02-24 21:32 被阅读885次

开发过程中难免会遇到一些需要横竖屏切换的需求,要实现这类需求一定需要明白android关于横竖屏过程中的一些问题。下面就对这类需求知识做一个整理,方便以后查阅。

1.首先是关于android:screenOrientation和 android:configChanges二个属性的详细作用表。

  • android:screenOrientation可以设置初始化横竖屏


  • android:configChanges
    用来设置 activity配置改变(不仅仅是屏幕方向,还有语言、地区等等)的集合。当一个配置改变在运行中发生时,activity默认情况下会先销毁然后重新创建。但是,如果通过这个属性声明了某个配置后,将可以避免上面的情况,而是依然运行,并回调 onConfigurationChanged() 方法。该属性可以设置多个值:

上面这二个属性在横竖屏切换中很关键,下面就看一些具体的流程。


2.横竖生命周期android3.2(api级别13)以后

  • 横竖屏的生命周期
    manifest中的配置为 android:configChanges="orientation"或者不配置,或android:configChanges="orientation|keyboardHidden"
    切换横屏生命周期重新执行一次,竖屏重新执行一次。
  • manifest中的配置为 android:configChanges="orientation|keyboardHidden|screenSize"
    生命周期不会重新执行,会回调onConfigurationChanged方法。


3.数据保存

  • 非重启模式设置android:configChanges="orientation|keyboardHidden|screenSize"时候执行的方法其他生命周期方法不会回调
    //设置
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        int type = newConfig.orientation;
        if (type == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
            //横屏
           setContentView(R.layout.activity_swcamera_streaming);
        } else if (type == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
            //竖屏
           setContentView(R.layout.activity_swcamera_streaming);
        }
        Log.i("jinwei", "newConfig" + newConfig);
    }
//重新setContentView这种方法可以达到横屏切换不重启,
//布局可以刷新,但是会重新设置view,其他数据不会被销毁。
  • 代码强制设置横竖屏
 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//横
 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//竖

  • 重启模式下
    manifest中的配置为 android:configChanges="orientation"或者不配置,或android:configChanges="orientation|keyboardHidden"
   //切换横竖屏时候onDestroy之前回调的方法,可以在这个方法中保存一些数据
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString("save", "save保存的");
        Log.i("jinwei", "onSaveInstanceState");
    }

    //重新创建activity恢复数据回调的方法,取的是onSaveInstanceState保存的值
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        String s = savedInstanceState.getString("save");
        Log.i("jinwei", "onRestoreInstanceState=" + s);
    }


    //这个方法保存的是Object推荐使用,onDestroy之前调用
    @Override
    public Object onRetainNonConfigurationInstance() {
        Log.i("jinwei", "onRetainNonConfigurationInstance");
        return "onRetainNon保存的";
    }

   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //获取onRetainNonConfigurationInstance中保存的值
        String data= (String) getLastNonConfigurationInstance();
        //获取onSaveInstanceState中保存的值
        savedInstanceState.savedInstanceState.getString("save");
    }

总结:在遇到横竖屏切换需求的时候,我们只需要解决好二个问题, 1.布局的刷新 2.数据的存储和恢复

参考

相关文章

  • Activity横竖屏切换

    横竖屏切换 activity 会被销毁 通过修改配置实现,横竖屏切换不销毁 android:configChang...

  • changeConfig配置 以及对activity生命周期的影

    Android横竖屏切换小结Android横竖屏切换小结(老样子,图片啥的详细文档,可以下载后观看 http://...

  • Android 横竖屏切换总结

    一.Android切换横竖屏 应用的横竖屏设置应用的横竖屏设置主要是通过Activity的screenOrient...

  • 直播

    Android屏幕横竖屏切换和生命周期管理的详细总结 - CSDN博客 Android视频直播原理详解 - csd...

  • Android横竖屏切换总结

    如何设置屏幕方向 用户手动设置在开启手机的自动旋转功能后旋转屏幕即可。 代码设置通过Activity类的setRe...

  • Android横竖屏切换总结

    开发过程中难免会遇到一些需要横竖屏切换的需求,要实现这类需求一定需要明白android关于横竖屏过程中的一些问题。...

  • Android 横竖屏切换总结

    首先,说一些常规的Activity的横竖屏切换的生命周期,如果没有在Manifests中特殊标明的话会重新生成一个...

  • Android横竖屏切换调研报告

    Android横竖屏切换调研报告 两种响应横竖屏切换的方式 不走生命周期,执行onConfigurationCha...

  • 横竖屏切换时Activity的生命周期

    横竖屏切换时Activity的生命周期 不设置android:configChanges 切换为横屏: onPau...

  • Android横竖屏切换生命周期的变化

    Android横竖屏切换生命周期的变化 在面试的时候,面试官可能会问到进行横竖屏切换时Activity生命周期的变...

网友评论

    本文标题:Android横竖屏切换总结

    本文链接:https://www.haomeiwen.com/subject/rqowwttx.html