0

向きが変更されたときに、Android (4.1 API 16) アプリケーションのレイアウトを変更する必要があります。

 @Override
    public void onConfigurationChanged(Configuration newConfig) {
      super.onConfigurationChanged(newConfig);
      setContentView(R.layout.main_2);
      System.out.println("Orientation changed!");
    }

また、次の行をマニフェスト ファイルに追加しました

android:configChanges="orientation"

方向を変更するには、Ctrl+F11 を使用します。画面は回転しますが、レイアウトは同じままで、LogCat には何も出力されません。onConfigChanged イベントが発生していないように感じます。

私の間違いはどこですか?

ありがとうございました。

4

3 に答える 3

4

使ってみてandroid:configChanges="orientation|keyboardHidden|screenSize"

注意: Android 3.2 (API レベル 13) から、デバイスが縦向きと横向きに切り替わると、「画面サイズ」も変わります。したがって、API レベル 13 以降 (minSdkVersion および targetSdkVersion 属性で宣言されている) 向けに開発するときに方向の変更によるランタイムの再起動を防止する場合は、「orientation」値に加えて「screenSize」値を含める必要があります。つまり、 android:configChanges="orientation|screenSize"を宣言する必要があります。ただし、アプリケーションが API レベル 12 以下をターゲットにしている場合、アクティビティは常にこの構成変更自体を処理します (Android 3.2 以降のデバイスで実行されている場合でも、この構成変更によってアクティビティが再開されることはありません)。

出典:ドキュメンテーション

したがって、アプリケーションがAPI 13 以降を"|screenSize" to configChangesターゲットにしている場合も追加してください。

于 2012-09-01T09:42:34.137 に答える
1

縦向きのレイアウト ファイルが layout/my_layout.xml にあるとします。

ランドスケープモードで使用したいレイアウトを同じレイアウトファイル名のlayout-landフォルダーに配置します。つまり、layout-land/my_layout.xml

そのアクティビティのマニフェストに android:configChanges="orientation" を追加しないでください。

レイアウトを明示的に変更する必要はありません。onConfigurationChanged(Configuration newConfig) 関数をオーバーライドする必要はありませ

于 2012-09-01T09:48:47.180 に答える
0

これを試してみてください....

android:configChanges="orientation|keyboardHidden|screenSize"
于 2013-01-17T07:10:56.147 に答える