33

テスト サンプルとして、ボタン クリックMainActivityで起動する 2 つのアクティビティを持つアプリケーションがあります。 Android 4.0.4 では正常に動作しますが、Android 4.1.2 では予期しない動作に遭遇しました。SecondActivity

システム設定の AutoRotation がオフになっています (またはオンになっています。関係ありません。"behind" オプションはとにかく無視されます)。
android:screenOrientation="landscape"は に設定されMainActivityandroid: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.xmlSecondActivityMainActivity

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 エミュレーター (バグ)
4

2 に答える 2

-1

android:targetSdkVersion="16"

SDKVersion=16 は v4.0 でのみ使用できるため、マニフェスト ファイルでこのステートメントを削除してください。

于 2013-01-03T07:36:06.713 に答える