Android 在方向上切换活动更改了吗?

Android 在方向上切换活动更改了吗?,android,back,android-orientation,Android,Back,Android Orientation,旋转手机时,如何切换到其他活动 我的要求: 活动A和B仅为纵向 城市L只是风景 当显示A或B的横向模式时,将启动L。当显示L的纵向时,将显示A或B 我可以创建这种行为,除了后退按钮。当它被按下时,我要么在横向中得到A/B,要么在纵向中得到L,这是我想要阻止的 我在做什么(活动A和B,但L是相似的) 要在方向更改时触发活动调用,请执行以下操作: @Override public void onConfigurationChanged(Configuration newConfig) {

旋转手机时,如何切换到其他活动

我的要求:

  • 活动A和B仅为纵向
  • 城市L只是风景
  • 当显示A或B的横向模式时,将启动L。当显示L的纵向时,将显示A或B
我可以创建这种行为,除了后退按钮。当它被按下时,我要么在横向中得到A/B,要么在纵向中得到L,这是我想要阻止的

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

要在方向更改时触发活动调用,请执行以下操作:

@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);
}
我想要下面这样的东西。但是手动(重新)设置方向会阻止调用OnConfiguration Changed():

@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(..)中调用它会起作用,因为方向更改不再调用该方法。但我猜当活动恢复时(当按下后退按钮时),配置会以其他方式发生更改。

看起来使用一个具有不同布局的活动来实现XML片段会更好。使用一个具有纵向XML布局(带有a+B片段)和横向布局(带有L片段)的活动。我已经使用了相当多的活动/片段,该应用程序并不小。因此,这样做会增加太多的复杂性,因为Android是一个单一活动的多个布局​ ​处理这个问题的方法。在我看来,破解一个自定义覆盖并污染你的后堆栈比让Android为你管理更复杂。亚历山大关于使用片段的建议已经涵盖了如何避免重复逻辑;我会做:活动1=片段A+L;活动2=片段B+L。或者您可以在单个活动的纵向视图中交换A/B片段。