2

我知道这个问题已经被问过了,但我的有点不同:

我的游戏有 2 个不同的布局文件;一种用于纵向模式,一种用于横向模式。当我旋转屏幕时,onCreate 方法会重新启动我的游戏(再次创建所有元素)。我不希望这种情况发生,所以我在清单中写了这一行:

android:configChanges="orientation"

它有效,未调用 onCreate,但未正确显示新布局!

我试图将以下代码放入我的 Activity 中,但它一直在做一些奇怪的事情:

@Override
public void onConfigurationChanged(Configuration newConfig) {
  super.onConfigurationChanged(newConfig);
  setContentView(R.layout.gameview);
}

我怎样才能解决这个问题?谢谢大家

4

2 回答 2

4

首先了解android中方向变化的工作原理:

  1. 默认情况下,活动在方向更改事件上重新启动(并转到 throw onCreate)。

  2. 如果您android:configChanges="orientation"在清单中写入 - 这意味着它不会被重新创建,而只是重新测量和重新绘制视图树。

关于您的代码的评论:

  • 如果您对不同的方向有不同的布局 - 您必须在方向改变时重新创建活动。
  • setContentView每个活动生命周期应该只调用一次方法。

处理这种情况的一般方法是:

  1. 在方法中保存游戏状态onSaveInstanceState
  2. onCreate如果提供,则在方法中恢复游戏状态(savedInstanceState参数不为空)。
  3. 从清单中删除对配置更改的侦听。
于 2012-07-16T13:26:48.353 回答
0

对于任何对象,您应该使用 onRetainNonConfigurationInstance() 保存状态和恢复状态 getLastNonConfigurationInstance()。或者在清单中硬编码设置 android:screenOrientation="portrait/landscape"。

于 2012-07-16T13:29:46.500 回答