2

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

  1. 正常模式:屏幕不应旋转,始终处于纵向模式。
  2. 全屏模式:屏幕可以是纵向或横向的

我只有 1 项活动来处理 2 种模式:

  1. 布尔变量isFullscreen(),指示Activity处于全屏模式或正常模式。
  2. changeMode()调用setContentView()以将 XML 布局适当地切换到当前模式
  3. 在清单文件中,我必须android:configChanges="screenSize|orientation"Activity句柄配置更改
  4. 覆盖方法onConfigurationChanged()

我试过这个:

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

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

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

    }
}

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

最后,我试过这个:

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

1 回答 1

2

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

代码:

if(isFullscreen){
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
}else{
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
于 2013-05-16T16:28:05.263 回答