web-dev-qa-db-ja.com

Android=アクティビティをリロードせずに画面の向きを変更する

Androidアプリを次のコード行で実行しながら、プログラムで方向を変更したい:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);

これまでのところは機能しますが、主な問題は、画面の向きが変わるとアクティビティ全体がリロードされることです。これは望ましくありません。出来ますか?ありがとう。

編集:OK、行方不明になったものを見つけた後、configChangesプロパティに "screenSize"も含める必要があったので

Android:configChanges="orientation|screenSize"

すべてを解決しました。

31
luisfer

@luisferによる編集を参照してください。 Android 3.2以降では、両方が必要です

Android:configChanges="orientation|screenSize"

http://developer.Android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange

28
larham1

OnSaveInstanceState(Bundle savedInstanceState)をオーバーライドし、変更するアプリケーション状態値をBundleパラメーターに書き込む必要があります

4
Martin

AndroidManifestファイルで、この方向を処理するアクティビティにAndroid:configChanges="orientation"を追加します

アクティビティでは、onConfigurationChangeオーバーライドメソッドを使用します。向きの変更で処理するタスクを実行します。

1
Raj Shah

ここに縫い付け:

Android、デバイスを回転させてもアクティビティを破壊しない方法

追加:

Android:configChanges="orientation"

あなたのアンドロイドマニフェストに。

見る:

http://developer.Android.com/guide/topics/manifest/activity-element.html#config

1
inigoD

このメソッドを呼び出してマニフェストファイルを設定する

Android:configChanges="orientation|screenSize|keyboardHidden"

public void onConfigurationChanged(Configuration newConfig) {
     super.onConfigurationChanged(newConfig);

        // Checks the orientation of the screen
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
        } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
            Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
        }
    }
1
ashah