web-dev-qa-db-ja.com

Android、デバイスを回転させたときにアクティビティを破壊しない方法

私はポートレートモードでのみ動作するアプリを使用しており、マニフェストファイルを変更して、すべてのアクティビティの向きをポートレートにしました。しかし、デバイスを回転させると、アクティビティが再び作成されます。アクティビティを破壊しない方法は?

79
Vasil

API 12以下:追加

Android:configChanges="orientation"

向きを変更するたびに画面サイズも変わるため、API 13以降をターゲットにしている場合は「screenSize」を追加します。 。 「screenSize」の使用の詳細については、以下のEggの回答を参照してください

Android:configChanges="orientation|screenSize"

androidManifest.xmlのアクティビティに追加します。これにより、アクティビティは自動的に再起動されません。詳細については、 ドキュメント を参照してください

125
user235064

公式文書からフルリンは言った、

注:アプリケーションがAPIレベル13以上(minSdkVersionおよびtargetSdkVersion属性で宣言されている)をターゲットとする場合、デバイスが縦向きと横向きを切り替えるときにも変更されるため、「screenSize」構成も宣言する必要があります。

したがって、アプリがAPIレベル13以上をターゲットにしている場合は、代わりにこの設定を設定する必要があります。

Android:configChanges="orientation|screenSize"

108
egg

適切なソリューションは

Android:configChanges = "orientation | screenSize"

Androidのドキュメント:

現在使用可能な画面サイズが変更されました。これは、現在のアスペクト比に対する現在使用可能なサイズの変更を表すため、ユーザーが横向きと縦向きを切り替えると変更されます。ただし、アプリケーションがAPIレベル12以下の場合、アクティビティは常にこの設定変更自体を処理します(Android 3.2以降のデバイス)で実行している場合でも、この設定変更はアクティビティを再起動しません。

9
er_benji

私はこれを少し混乱させてから、マニフェストファイル内で、アクティビティレベルではなくアプリケーションレベルで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> 
5
superheron

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>
1
pkoepke

フローティング画像でこのコードを見てください。画面の回転を処理する最も興味深い方法があります。 http://code.google.com/p/floatingimage/source/browse/#svn/trunk/floatingimage/src/dk/nindroid/rss/orientation

0
androidworkz