ポートレートモードでのみ動作するアプリがあり、すべてのアクティビティのマニフェストファイルに、向きがポートレートになるように変更を加えました。しかし、デバイスを回転させると、アクティビティが再び作成されます。活動を破壊しない方法は?
ポートレートモードでのみ動作するアプリがあり、すべてのアクティビティのマニフェストファイルに、向きがポートレートになるように変更を加えました。しかし、デバイスを回転させると、アクティビティが再び作成されます。活動を破壊しない方法は?
回答:
以下のためのAPI 12以下:アドオン
android:configChanges="orientation"
API 13以降をターゲットにしている場合は、「screenSize」を追加します。向きが変わると画面サイズも変わるため、そうしないと、新しいデバイスが引き続きアクティビティを破壊してしまいます。「screenSize」の使用の詳細については、以下のEggの回答を参照してください。
android:configChanges="orientation|screenSize"
AndroidManifest.xmlのアクティビティに追加します。このようにして、アクティビティが自動的に再開されることはありません。詳細については、ドキュメントを参照してください
フルリンが言った公式文書から、
注:アプリケーションがAPIレベル13以上(minSdkVersion属性とtargetSdkVersion属性で宣言されている)をターゲットにしている場合は、デバイスが縦向きと横向きを切り替えるときにも変更されるため、「screenSize」構成も宣言する必要があります。
したがって、アプリがAPIレベル13以上を対象としている場合は、代わりに次の構成を設定する必要があります。
android:configChanges="orientation|screenSize"
私はこれを少し混乱させてから、マニフェストファイル内でconfigChangesをアクティビティレベルではなくアプリケーションレベルに配置していることを確認しました。これが私にとって正しく機能しているときのコードの様子です。
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
android:configChanges="orientation|screenSize|keyboardHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
Androidが分割画面(Android用語では「マルチウィンドウ」)をサポートするようになったので、screenSize | smallestScreenSize | screenLayout | orientationも追加することをお勧めします。したがって、回転と分割画面を処理するには、android:configChangesで次のようなものが必要になります
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
android:configChanges="orientation|screenSize|keyboardHidden|smallestScreenSize|screenLayout">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
FloatingImageでこのコードを見てください。これは、これまでで最も興味深い画面回転の処理方法を備えています。http://code.google.com/p/floatingimage/source/browse/#svn/trunk/floatingimage/src/dk/nindroid/rss/orientation
マニフェストに書き込む:
android:configChanges="orientation|screenSize|keyboardHidden"
問題を解決したアクティビティでこれをオーバーライドします。
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}