2

私はこの質問がすでに尋ねられたことを知っていますが、私のものは少し異なります:

ゲーム用に2つの異なるレイアウトファイルがあります。1つはポートレートモード用、もう1つはランドスケープモード用です。画面を回転させると、onCreateメソッドでゲームが再開されます(すべての要素が再度作成されます)。これを起こしたくないので、マニフェストに次の行を書きました。

android:configChanges="orientation"

onCreateは呼び出されませんが、新しいレイアウトが正しく表示されていません。

アクティビティに次のコードを入れようとしましたが、奇妙なことを続けています。

@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回だけ呼び出す必要があります。

この状況を処理する一般的な方法は次のとおりです。

  1. ゲームの状態をメソッドに保存するonSaveInstanceState
  2. メソッドで、onCreate指定されている場合はゲームの状態を復元します(savedInstanceStateparamはnullではありません)。
  3. マニフェストから構成変更のリッスンを削除します。
于 2012-07-16T13:26:48.353 に答える
0

オブジェクトの保存状態と復元状態getLastNonConfigurationInstance()には、onRetainNonConfigurationInstance()を使用する必要があります。または、マニフェストにandroid:screenOrientation = "portrait/landscape"をハードコードして設定します。

于 2012-07-16T13:29:46.500 に答える