Android 手机应用运行的时候,一般用户都是竖屏,突然将手机横屏的时候,那么程序会出现异常,因为在Android中每次屏幕切换都会,重启当前的Activiy,这种情况下,异常的处理方式有三种:

     1.锁定横竖屏

             在AndroidManifest.xml文件中,对Activity定义屏幕方向属性只能为横屏或竖屏。

             将屏幕固定为横屏:

            <activity android:screenOrientation="portrait">

将屏幕固定为竖屏:

            <activity android:screenOrientation="landscape">


          因为一个Android应用中会有多个Activity,那么可以根据需要去配置每个activity的显示方式,如果不设置,默认可以横竖屏切换,或在源代码中横竖屏。

设置竖屏:

          SetRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);


          设置横屏:

          SetRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

   2.源代码中处理横竖屏事件

在AndroidManifest.xml文件中对Activity注册android:configChanges属性,然后在对应的Activity源代码中重写onConfigurationChanged()函数即可     


@Override
         public void onConfigurationChanged(Configuration newConfig){
              super.onConfigurationChanged(newConfig);
              if(this.getResources().getConfiguration().oritention==Configuration.ORITENTION.LANDSCAPE){
                  Log.e("Himi","当前屏幕切换成横屏显示模示");
              } else if (this.getResources().getConfiguration().oritention==Configuration.ORITENTION.PORTRAIT){
                  Log.e("Himi","当前屏幕切换成竖屏显示模示");
              } 
        }

       使用此方式在切换横竖屏的时候,Android就不会重启当前Activity了。

   3. 重写onSaveInstanceState()  与 onRestoreInstanceState()函数       


@Override
      public void onSaveInstanceState(Bundle outState){
        super.onSaveInstanceState(outState);
        Log.e("Himi","ONSAVE");
      }
      @Override
      public void onRestoreInstanceState(Bundle outState){
        super.onRestoreInstanceState(outState);
        Log.e("Himi","RESTORE");
      }

        在屏幕进行横竖屏切换的时候,会响应onSaveInstanceState()函数,然后重启进入当前Activity,最后再执行onRestoreInstanceState函数,通过切换这两个函数进行屏幕横竖屏的处理。