Android横竖屏切换总结

如何设置屏幕方向

  • 用户手动设置
    在开启手机的自动旋转功能后旋转屏幕即可。

  • 代码设置
    通过Activity类的setRequestOrientation(int orientation)方法。
    参数orientation从ActivityInfo类的静态常量获取,常用的如下:

    ActivityInfo.SCREEN_ORIENTATION_PORTRAIT//竖屏
    ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE//横屏                     
    ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT//竖屏反方向
    ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE//横屏反方向
    

如何获取当前屏幕方向

  int Activity.getRequestOrientation();//返回一个整型,此整型在ActivityInfo中

生命周期

如下代码:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.e(MainActivity.class.getSimpleName(),"---onCreate()---");
}

@Override
protected void onStart() {
    super.onStart();
    Log.e(MainActivity.class.getSimpleName(),"---onStart()---");
}

@Override
protected void onResume() {
    super.onResume();
    Log.e(MainActivity.class.getSimpleName(),"---onResume()---");
}

@Override
protected void onPause() {
    super.onPause();
    Log.e(MainActivity.class.getSimpleName(),"---onPause()---");
}

@Override
protected void onStop() {
    super.onStop();
    Log.e(MainActivity.class.getSimpleName(),"---onStop()---");
}

@Override
protected void onDestroy() {
    super.onDestroy();
    Log.e(MainActivity.class.getSimpleName(),"---onDestroy()---");
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    Log.e(MainActivity.class.getSimpleName(),"---onConfigurationChanged()---");
}
}
  • 节点未配置android:configChange属性情况下旋转屏幕输出

    E/MainActivity: ---onStart()---
    E/MainActivity: ---onResume()---
    E/MainActivity: ---onPause()---
    E/MainActivity: ---onStop()---
    E/MainActivity: ---onDestroy()---
    E/MainActivity: ---onCreate()---
    E/MainActivity: ---onStart()---
    E/MainActivity: ---onResume()---
    

可以看出在未配置configChange属性的情况下旋转屏幕会销毁并重建Activity

  • 节点配置如下

      
        
              
    

控制台打印输出:

   E/MainActivity: ---onCreate()---
   E/MainActivity: ---onStart()---
   E/MainActivity: ---onResume()---
   E/MainActivity: ---onConfigurationChanged()---

可以看出在配置了android:configChanges="orientation|screenSize|keyboardHidden"后旋转屏幕系统不会销毁Activity而是调用onConfigurationChanged()方法

注意:当配置configChanged属性后,如果后台没有APP进程时进入APP,如果此时手机是横屏则系统默认加载的是layout-land(如果有的话)资源目录下的布局文件,如果是竖屏则加载layout目录下的资源文件(即使用户旋转屏幕也不会变)。可以认为只有在未配置configChanged属性的情况下系统才会在屏幕旋转的时候适配为横竖屏切换而设置的相应资源文件。

你可能感兴趣的:(Android横竖屏切换总结)