zoukankan      html  css  js  c++  java
  • Android-Activity横竖屏切换不杀死Activity 并监听横竖屏切换

    在上一篇博客,Android-Activity临时数据的保存,中讲解到,当发生横竖屏切换的时候,系统会杀死Activity并重新启动Activity

    系统会杀死Activity

    12-12 08:11:50.441 3347-3347/liudeli.activity D/TempDataActivity: onPause
    12-12 08:11:50.441 3347-3347/liudeli.activity D/TempDataActivity: onStop
    12-12 08:11:50.441 3347-3347/liudeli.activity D/TempDataActivity: onDestroy

    并重新启动Activity
    12-12 08:11:50.460 3347-3347/liudeli.activity D/TempDataActivity: onCreate 上次看到了223页
    12-12 08:11:50.460 3347-3347/liudeli.activity D/TempDataActivity: onCreate
    12-12 08:11:50.460 3347-3347/liudeli.activity D/TempDataActivity: onStart
    12-12 08:11:50.460 3347-3347/liudeli.activity D/TempDataActivity: onRestoreInstanceState 上次看到了223页
    12-12 08:11:50.460 3347-3347/liudeli.activity D/TempDataActivity: onResume


    当横竖屏切换的时候,系统会杀死Activity并重新启动Activity,这是不合理的,但是安卓系统默认就是这样设计的

    解决Activity横竖屏切换不杀死Activity 不重新启动Activity,只需在Activity节点中添加 android:configChanges="orientation|keyboardHidden|screenSize" 即可

    <activity android:name=".temp_data.TempDataActivity"
              android:configChanges="orientation|keyboardHidden|screenSize">
    </activity>

    监听横竖屏切换,为什么要监听横竖屏切换呢,因为有这样的需求:竖屏显示界面 和 横屏显示界面不一样

    需要在Activity重写以下方法,即可监听横竖屏切换:

      /**
         * 需要在Activity节点设置android:configChanges="orientation|keyboardHidden|screenSize"
         * 横竖屏切换才会调用此方法,进行监听
         * @param newConfig
         */
        @Override
        public void onConfigurationChanged(Configuration newConfig) {
            super.onConfigurationChanged(newConfig);
            // 获取到屏幕的方向
            int orientation = newConfig.orientation;
            switch (orientation) {
    
                // 横屏
                case Configuration.ORIENTATION_LANDSCAPE:
                    setContentView(R.layout.activity_temp_data_horizontal);
                    break;
    
                // 竖屏
                case Configuration.ORIENTATION_PORTRAIT:
                    setContentView(R.layout.activity_temp_data);
                    break;
            }
        }

    activity_temp_data.xml (横屏需要的布局文件)

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="我是竖屏"
            android:textSize="40dp"
            android:layout_centerInParent="true"
            />
    
    </RelativeLayout>

     activity_temp_data_horizontal.xml (竖屏需要的布局文件)

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="我是横屏,我很宽我很宽"
            android:textSize="40dp"
            android:layout_centerInParent="true"
            />
    
    </RelativeLayout>

    效果:

    在开发中,如果需求没有明确要指定 横屏 或 竖屏,可以直接把屏幕方向定死为 竖屏  android:screenOrientation="portrait",这样可以减少很多不必要带来的麻烦和Bug

  • 相关阅读:
    转:Unity3D的四种坐标系
    在知乎回答的一个问题:C#初学者以后往WP开发走,还是往unity3d走?哪个更有前景呢
    Unity3d 引擎原理详细介绍、Unity3D引擎架构设计
    vs2010打开vs2012的sln文件
    Unity3d不支持vistual studio2012?用vs2012打开unity c#脚本进行编码的方法。
    C#学习笔记15:字符串、文件、目录的操作方法
    C#学习笔记14:面向对象继承的特点和里氏转换
    C#学习笔记13:静态方法、方法重载和ref、out参数
    C#学习笔记12:枚举、结构、数组基础学习
    C#学习笔记11:C#中的顺序结构、分支结构、循环结构
  • 原文地址:https://www.cnblogs.com/android-deli/p/10111242.html
Copyright © 2011-2022 走看看