私はかなり長い間探してきましたが、まだ運がありません。コードを現在編集されているバージョンに変更します。 EDITED アプリケーションでは、onCreate で次のように開始します。
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.game_activity);
. . . . .
アプリはまだ問題なく動作します。onConfigurationChange() で setContentView() を削除したので、スイッチは実際には何もしません:
@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
switch(newConfig.orientation)
{
case Configuration.ORIENTATION_PORTRAIT:
break;
case Configuration.ORIENTATION_LANDSCAPE:
break;
}
} // onConfigurationChanged()
空白の画面がなくなったので、安心です。
しかし; アプリを P モードで起動し、構成を L モードに変更すると、レイアウトは P モードと同じままになり、その逆も同様です。
ふと気がついた!活動は一度だけ開始されます!それはまさに私が望んでいることですが、コードが一度しか実行されないことも意味します。まずそれを確認しなければなりません。
編集
OK、必要なものをすべてチェックアウトしました。しかし、問題は残ります。
縦向きモードでアプリを起動すると、すべて問題ありません。しかし、横向きモードに変更すると、構成の変更が実行され、縦向きレイアウトのみが使用され、その逆も同様です。
私は、xml のさまざまな方向に対してさまざまなレイアウトを持っています。私も持っています
android:configChanges="orientation|screenSize" >
マニフェストで。
私には選択肢がありません。どんな助けでも大歓迎です。
もう一度編集
証明するのは難しかったが、私は成功した。これは、縦向きモード用の XML と横向きモード用の XML です。
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/portGame480x800"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:tag="layout_game_activity"
tools:context=".MeMoInfoActivity" >
.....
</LinearLayout
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/landGame480x800"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:baselineAligned="false"
android:tag="layout-land_game_activity"
tools:context=".MeMoInfoActivity" >
....
</LinearLayout>
これはコードです:
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
Log.i(TAG, "***************************\nMeMoGameActivity onConfigurationChanged\n***************************");
switch(newConfig.orientation)
{
case Configuration.ORIENTATION_PORTRAIT:
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
LinearLayout portLayout = (LinearLayout) findViewById(R.id.portGame480x800);
if(portLayout != null)
{
String portTag = (String) portLayout.getTag().toString();
Log.i(TAG, "Portrait portTag: "+portTag);
}
break;
case Configuration.ORIENTATION_LANDSCAPE:
Toast.makeText(this, "Landscape", Toast.LENGTH_SHORT).show();
LinearLayout landLayout = (LinearLayout) findViewById(R.id.landGame480x800);
if(landLayout != null)
{
String landTag = (String) landLayout.getTag().toString();
Log.i(TAG, "LansScape landTag: "+landTag);
}
break;
}
} // onConfigurationChanged()
これは logcat からの出力です。
09-30 17:10:32.376: I/MeMoGame(2509): ***************************
09-30 17:10:32.376: I/MeMoGame(2509): MeMoGameActivity onConfigurationChanged
09-30 17:10:32.376: I/MeMoGame(2509): ***************************
09-30 17:10:32.534: I/MeMoGame(2509): LANDSCAPE InfoActivity dispWidthPX: 800
09-30 17:11:02.234: I/MeMoGame(2509): ***************************
09-30 17:11:02.234: I/MeMoGame(2509): MeMoGameActivity onConfigurationChanged
09-30 17:11:02.234: I/MeMoGame(2509): ***************************
09-30 17:11:02.384: I/MeMoGame(2509): Portrait portTag: layout_game_activity
09-30 17:11:02.384: I/MeMoGame(2509): PORTRAIT InfoActivity dispWidthPX: 480
09-30 17:11:02.896: D/dalvikvm(2509): GC_CONCURRENT freed 102K, 3% free 6320K/6471K, paused 19ms+7ms, total 320ms
アプリは縦向きモードで起動されました。ランドスケープレイアウトを実行したことがないことは明らかです。
誰か助けてくれませんか?