创建一个成员变量并保存当前设置状态。短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="方向"
在您的清单文件中,它不允许在更改设备方向时重新创建活动。
希望它对你有用。
如果你想检测反向状态也可以使用
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 的情况下设置景观。
您还可以设置旋转而不是方向,以便您的设备处于旋转状态而不是定向状态。