テスト サンプルとして、ボタン クリックMainActivity
で起動する 2 つのアクティビティを持つアプリケーションがあります。
Android 4.0.4 では正常に動作しますが、Android 4.1.2 では予期しない動作に遭遇しました。SecondActivity
システム設定の AutoRotation がオフになっています (またはオンになっています。関係ありません。"behind" オプションはとにかく無視されます)。
android:screenOrientation="landscape"
は に設定されMainActivity
、android:screenOrientation="behind"
は に設定されてSecondActivity
います。つまり、SecondActivity
も横向きで起動する必要があります。
これは Android 4.0.4 にも当てはまりますが、Android 4.1.2SecondActivity
では縦向きから始まります。
AndroidManifest.xml:
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="16" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.my.example.testbehindorientation.MainActivity"
android:label="@string/app_name"
android:screenOrientation="landscape" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.my.example.testbehindorientation.SecondActivity"
android:configChanges="screenSize|orientation"
android:label="@string/title_activity_second"
android:screenOrientation="behind" >
</activity>
</application>
SecondActivity.java:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
logOrientation("onCreate");
}
@Override
protected void onDestroy() {
super.onDestroy();
logOrientation("onDestroy");
}
@Override
protected void onResume() {
super.onResume();
logOrientation("onResume");
}
private void logOrientation(String prefix) {
int requestedOrientation = this.getRequestedOrientation();
WindowManager lWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
Configuration cfg = getResources().getConfiguration();
int lRotation = lWindowManager.getDefaultDisplay().getRotation();
int orientation = cfg.orientation;
Log.i(LOG_TAG, prefix + ", requestedOrientation is " + requestedOrientation + ", rotation is " + lRotation + ", orientation is " + orientation);
}
ボタンをクリックした後、行android:configChanges="screenSize|orientation"
なしで出力をログに記録します。AndroidManifest.xml
SecondActivity
MainActivity
onCreate, requestedOrientation is 3, rotation is 1, orientation is 2
onResume, requestedOrientation is 3, rotation is 1, orientation is 2
onDestroy, requestedOrientation is 3, rotation is 0, orientation is 1
onCreate, requestedOrientation is 3, rotation is 0, orientation is 1
onResume, requestedOrientation is 3, rotation is 0, orientation is 1
android:configChanges="screenSize|orientation"
次の行を含むログAndroidManifest.xml
:
onCreate, requestedOrientation is 3, rotation is 1, orientation is 2
onResume, requestedOrientation is 3, rotation is 1, orientation is 2
現在、アクティビティのレクリエーションはありませんが、結果は常に同じです -SecondActivity
縦向きから始めています! :( つまりSecondActivity
、なんらかの理由で onResume 後に縦向きに回転します。なぜですか?.
テスト済み:
- Android 4.0.4 を搭載した Samsung Galaxy S3 (OK)
- Android 4.1搭載のSamsung Galaxy S3.? (バグ)
- ホーム画面が縦向きの Android 4.1.2 のエミュレーター (バグ)
- Android 4.0.3 エミュレータ (OK)
- Android 4.2 エミュレーター (バグ)