2
目前,我有一个家长Activity
,其取向可以是横向模式或纵向模式,具体取决于设备加速度计。将活动恢复到其原始方向的正确方法
它将启动一个小孩Activity
,它的方向始终处于横向模式。
当用户退出子女Activity
时,我可以立即恢复其原始方向。
我尝试下面的神话。它不起作用。
public class ParentActivity extends SherlockFragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
if (savedInstanceState == null) {
} else {
int orientation = savedInstanceState.getInt(ORIENTATION_KEY);
// **Orientation is completely detached from Accelerometer**
if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
} else {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
@Override
protected void onSaveInstanceState (Bundle savedInstanceState) {
// Calling super.onSaveInstanceState is important.
super.onSaveInstanceState(savedInstanceState);
// **Too late**
int orientation = getResources().getConfiguration().orientation;
savedInstanceState.putInt(ORIENTATION_KEY, orientation);
}
}
有2个问题的代码
- 太晚了 - 当景观孩子
Activity
启动,和家长Activity
的onSaveInstanceState
被调用,获得的定向值始终景观,虽然父母Activity
原本是在肖像模式下。 - 方向与加速度计完全分离 - 一旦调用
setRequestedOrientation
,父方Activity
方向将被固定,不再依赖于设备加速度计。我的意图是在孩子Activity
已退出之后恢复父母Activity
初始方向。之后,通过旋转设备,我们仍然可以随父母Activity
方向自由玩耍。
可以为您节省在开始子Activity之前的方向。您可以在您调用子Activity中的完成方法之后立即恢复它。也许它可以做到这一点。 –
是的。您的建议将解决**太晚**问题。但是,**方向在调用'setRequestedOrientation'后是否完全脱离了Accelerometer **? –
因此,您不再能够在退出子Activity之后旋转设备并获取相应的屏幕方向?这很奇怪。似乎在清单文件中存在一些错误配置,但当然你已经检查过了......是吗?不,这不是问题所在,否则即使在致电儿童Activit之前,您也无法获得方向更改。 –