私はAndroidアプリに取り組んでいます.現在、ユーザーはすべてのアクティビティで水平ビューのみを使用するように制限しています.
画面を回転するオプションをユーザーに提供できるようにしたいのですが、そうすると、同じままではなく、最初からアクティビティが開始されます。
画面を回転させたときに状態を保存する方法はありますか?
まず、アクティビティ内でオーバーライドする必要があります。onConfigurationChanged(Configuration)
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();
}
}
また、マニフェストファイルの適切な要素を編集して、android:configChangesを含める必要があります。以下のコードを参照してください。
<activity android:name=".MyActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
私もマルコのアイデアが好きですが、それは単に効率的ではありません。このように、onCreate / onStartup/etcを呼び出す必要はありません。いつも単純な回転をします。インフラストラクチャを最初から「再構築」する必要はありません(たとえば、ビューを取得するなど)。
デバイスを回転させるたびに、onCreateメソッドが再度呼び出されます。onSavedInstanceStateをオーバーライドして値を保存し、onRestoreInstanceStateまたはonCreateメソッドに戻すことができます。たとえば、ブール値を保存しましょう(好きなものを保存できます):
値を保存します。
public void onSaveInstanceState(Bundle outState) {
outState.putBoolean("booleanValue", true);
}
値を復元します(これはonCreateでも呼び出すことができます):
protected void onRestoreInstanceState(Bundle savedInstanceState) {
if (savedInstanceState != null && savedInstanceState.containsKey("booleanValue")) {
boolean myBoolean = savedInstanceState.getBoolean("booleanValue");
}
super.onRestoreInstanceState(savedInstanceState);
}
<activity (...)
android:configChanges="orientation|keyboard"
(...)>
これをマニフェストに追加しても、レイアウトを変更した後に Android がアクティビティを再開することはできません。