Androidアプリを次のコード行で実行しながら、プログラムで方向を変更したい:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
これまでのところは機能しますが、主な問題は、画面の向きが変わるとアクティビティ全体がリロードされることです。これは望ましくありません。出来ますか?ありがとう。
編集:OK、行方不明になったものを見つけた後、configChangesプロパティに "screenSize"も含める必要があったので
Android:configChanges="orientation|screenSize"
すべてを解決しました。
@luisferによる編集を参照してください。 Android 3.2以降では、両方が必要です
Android:configChanges="orientation|screenSize"
http://developer.Android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange
OnSaveInstanceState(Bundle savedInstanceState)をオーバーライドし、変更するアプリケーション状態値をBundleパラメーターに書き込む必要があります
AndroidManifestファイルで、この方向を処理するアクティビティにAndroid:configChanges="orientation"
を追加します
アクティビティでは、onConfigurationChangeオーバーライドメソッドを使用します。向きの変更で処理するタスクを実行します。
ここに縫い付け:
Android、デバイスを回転させてもアクティビティを破壊しない方法
追加:
Android:configChanges="orientation"
あなたのアンドロイドマニフェストに。
見る:
http://developer.Android.com/guide/topics/manifest/activity-element.html#config
このメソッドを呼び出してマニフェストファイルを設定する
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();
}
}