У меня есть макет, который в настоящее время поддерживает изменение ориентации, перезаписывая onConfigurationChanged
и упорядочивая виды на основе выбранной ориентации. Попытка поддержать ту же функциональность, вызывая ее с помощью кнопки просмотра «свернуть / развернуть», но изменение ориентации вызывается дважды с новой и старой ориентациями.
У меня есть adjustConfig(int orientation)
метод, который заботится о перемещении видов, скрытии / показе того, что нужно - он выполняет свою работу.
@Override
public void onConfigurationChanged(Configuration newConfig) {
adjustConfig(newConfig.orientation);
super.onConfigurationChanged(newConfig);
//since fullScreeBtn blocks the orientation sensors, we enable it back
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
}
}
public void adjustConfig (int orientation) {
// do some hide/show work based on the orientation type
}
fullScreeBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
setRequestedOrientation(
getResources().getConfiguration().orientation ==
Configuration.ORIENTATION_LANDSCAPE ?
ActivityInfo.CREEN_ORIENTATION_PORTRAIT :
ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
});
У меня есть кнопка полноэкранного режима / минимизации, которая вызывает
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
или
setRequestedOrientation(ActivityInfo.CREEN_ORIENTATION_PORTRAIT)
в зависимости от ориентации, которую я хочу изменить, и которая запускается по очереди onConfigurationChanged
, которая обрабатывает мою конфигурацию, пока что все хорошо, но проблема в том, что, например, если я нахожусь на портрете и нажимаю на кнопку, чтобы переключиться для ландшафта поток работает и запускает onConfigurationChanged
с новой конфигурацией ландшафта, которая вносит изменения, но затем немедленно вызывается onConfigurationChanged
с текущим режимом, который является портретным, и я снова получаю исходное состояние - портрет.
РЕДАКТИРОВАТЬ: В настоящее время способ работы кода заключается в том, что вы можете либо начать физически вращать телефон и переключаться назад и вперед между портретным и альбомным режимом, либо нажимать на минимизированный / полный экран, но не на оба, начиная с момента, когда я звоню
setRequestedOrientation
в fullScreeBtn
он вызывает ориентацию и отключает прослушивание датчика, поэтому, когда я нажимаю на полный экран, он поворачивает экран так, как я хочу, затем поворачиваю телефон, чтобы увидеть его, но с этого момента я застрял так как я не могу повернуть назад физически, только снова нажав на свернутое изображение.
Моя цель - иметь поддержку датчиков и ручного режима, поэтому, если я нажму fullScreeBtn
, он переключится в ландшафтный режим, и пользователю потребуется повернуть телефон, чтобы настроить комфортный вид, точно так же, как YouTube делает сегодня.