活动在屏幕旋转时重启我的游戏(Android)

时间:2012-07-16 13:13:15

标签: android layout orientation oncreate

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

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

android:configChanges="orientation"

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

我尝试将以下代码放在我的Activity中,但它只是做了一些奇怪的事情:

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

我该如何解决这个问题? thanx guys

2 个答案:

答案 0 :(得分:4)

首先要了解android中的方向变化是如何工作的:

  1. 默认情况下,活动会在方向更改事件上重新启动(并且会抛出onCreate)。

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

  3. 关于您的代码的评论:

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

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

    1. 在方法onSaveInstanceState
    2. 中保存游戏状态
    3. onCreate方法恢复游戏状态(如果提供)(savedInstanceState param不为空)。
    4. 删除从清单中更改配置的监听。

答案 1 :(得分:0)

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

相关问题