在方向改变时切换活动?
Switch activiy on orientation changed?
如何在旋转 phone 时切换到另一个 activity?
我的要求:
- Activity A 和 B 只是肖像
- 活动 L 仅为景观
- 当显示A或B的横向模式时,L会被启动。当要显示L的肖像时,显示A或B。
我可以创建此行为,期待后退按钮。当它被按下时,我要么在风景中得到 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 恢复时(按下后退按钮时)配置会以其他方式更改。
如何在旋转 phone 时切换到另一个 activity?
我的要求:
- Activity A 和 B 只是肖像
- 活动 L 仅为景观
- 当显示A或B的横向模式时,L会被启动。当要显示L的肖像时,显示A或B。
我可以创建此行为,期待后退按钮。当它被按下时,我要么在风景中得到 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 恢复时(按下后退按钮时)配置会以其他方式更改。