在onConfigurationChange()中允许/拒绝屏幕旋转 - Android

时间:2013-05-16 16:04:36

标签: android

我有一个处理2种显示模式的活动:

  1. 普通模式:屏幕不应旋转,始终处于纵向模式。
  2. 全屏模式:屏幕可以是纵向或横向
  3. 我只有1个活动来处理2种模式:

    1. 布尔变量isFullscreen(),表示Activity处于全屏模式或普通模式。
    2. changeMode()调用setContentView()将XML布局切换为当前模式
    3. 清单文件中的
    4. ,我android:configChanges="screenSize|orientation"Activity处理配置更改
    5. 覆盖方法onConfigurationChanged()
    6. 我试过这个:

      @Override
      public void onConfigurationChanged(Configuration newConfig) {
          if (isFullscreen) {
              super.onConfigurationChanged(newConfig);
          } else {
              super.onConfigurationChanged(newConfig);
              setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
          }
      }
      

      但在这种情况下:screet不会在任何模式下旋转(即使在全屏模式下也是如此,isFullscreen() et为true)

      @Override
      public void onConfigurationChanged(Configuration newConfig) {
          if (isFullscreen) {
              super.onConfigurationChanged(newConfig);
          } else {
      
          }
      }
      

      但是我得到了Super Not Called exception或类似的东西(我在想,如果我在正常模式下不调用超级,它就不会旋转屏幕)

      最后,我试过这个:

      @Override
      public void onConfigurationChanged(Configuration newConfig) {
          if (isFullscreen) {
              super.onConfigurationChanged(newConfig);
          } else {
              newConfig.orientation = Configuration.ORIENTATION_PORTRAIT;
              super.onConfigurationChanged(newConfig);
          }
      }
      

1 个答案:

答案 0 :(得分:2)

当您切换全屏调用时,请不要在onConfigurationChanged中执行此操作

代码:

if(isFullscreen){
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
}else{
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}