メンバー変数を作成し、現在の設定状態を保存します。短い is_landscape = -1;
oncheckedchange リスナーを使用すると、状態を永続的に設定して保存できます。
if (is_landscape == -1) {
Configuration config_screen = getResources().getConfiguration();
int orientation = config_screen.orientation;
if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
setRequestedOrientation(Configuration.ORIENTATION_LANDSCAPE);
is_landscape = 0;
} else {
setRequestedOrientation(Configuration.ORIENTATION_PORTRAIT);
is_landscape = 1;
}
}
問題は、デバイスを回転させるたびにアクティビティが再作成されるため、状態が失われることです。is_landscape 変数を保存するだけです
@Override
protected void onSaveInstanceState(Bundle outState) {
oustate.putExtra("last_state", is_landscape);
super.onSaveInstanceState(outState);
}
you can restore your position on on restore instance
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
is_landscape = savedInstanceState.getShort("last_state");
if (is_landscape == 0) {
setRequestedOrientation(Configuration.ORIENTATION_LANDSCAPE);
} else if (is_landscape == 1) {
setRequestedOrientation(Configuration.ORIENTATION_PORTRAIT);
}
super.onRestoreInstanceState(savedInstanceState);
}
インスタンスを保存して復元したくない場合は、使用できます。
Android:configChanges="向き"
あなたのmenifestファイルでは、デバイスの向きを変えたときにアクティビティを再作成することはできません.
それがあなたのために働くことを願っています。
リバース状態も検出したい場合は、使用できます
int state = (WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay().getRotation();
状態が Surface.ROTATION_0 の場合は縦、状態が Surface.ROTATION_90 の場合は横、状態が Surface.ROTATION_180 の場合は逆の縦、状態が Surface.ROTATION_270 の場合は逆の横になります。
Surface.ROTATION_0 と Surface.ROTATION_180 の場合は縦に設定します。Surface.ROTATION_90 と Surface.ROTATION_270 の場合はランドスケープを設定します。
デバイスが向きの状態ではなく回転状態になるように、向きの代わりに回転を設定することもできます。