在方向改变时切换活动?

Switch activiy on orientation changed?

如何在旋转 phone 时切换到另一个 activity?

我的要求:

我可以创建此行为,期待后退按钮。当它被按下时,我要么在风景中得到 A/B,要么在肖像中得到 L,我想阻止这种情况。

我在做什么(活动 A 和 B,但 L 类似)

要触发 activity 方向更改调用:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    int newOrientation = newConfig.orientation;
    if (newOrientation == Configuration.ORIENTATION_LANDSCAPE) {
        Intent intent = new Intent(this, ActivityL.class);
        startActivity(intent);
    }

    super.onConfigurationChanged(newConfig);
}

我想要类似下面的东西。但是手动(重新)设置方向会阻止 onConfigurationChanged() 被调用:

@Override
public void onResume(){
    super.onResume();

    int currentOrientation = this.getResources().getConfiguration().orientation;
    if (currentOrientation == Configuration.ORIENTATION_LANDSCAPE) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }
}

当然,如果我在其他生命周期方法或 onCreate(...) 中执行此操作,也会发生同样的情况。

所有活动有:

  android:screenOrientation="sensor"

我也尝试过使用旋转角度模拟方向变化,但行为似乎大多是随机的,甚至不接近正常的方向变化。

我想 setRequestedOrientation() 会覆盖我在 AndroidManifest 中定义的内容:

android:screenOrientation="sensor"

我需要将其重置为传感器以恢复自动方向更改:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    int newOrientation = newConfig.orientation;
    if (newOrientation == Configuration.ORIENTATION_LANDSCAPE) {
        Intent intent = new Intent(this, ActivityL.class);
        startActivity(intent);
    }
    super.onConfigurationChanged(newConfig);

    // Reset to sensor:
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
}

我有点惊讶在 onConfigurationChanged(..) 中调用它是有效的,因为方向改变不再调用该方法。但我想当 activity 恢复时(按下后退按钮时)配置会以其他方式更改。