Принудительная ориентация, при этом разрешая изменение ориентации устройства?

Вот такая ситуация:

У меня есть простое действие, которое меняет свое содержимое при изменении ориентации.

Мне нужна возможность принудительно изменять ориентацию (альбомная -> портретная, портретная -> альбомная) в ответ на нажатие какой-либо кнопки и после этого все еще обрабатывать изменения ориентации.

Я попытаюсь объяснить себя конкретным примером (который я хочу выполнить) -

Допустим, устройство находится в портретном режиме -> действие начинается в портретном режиме.
Теперь пользователь нажимает какую-то кнопку, которая в ответ переводит действие в альбомный режим.
Теперь пользователь поворачивает устройство в альбомный режим, НО с действием ничего не должно произойти, потому что действие было принудительно переведено в альбомный режим.
Теперь пользователь поворачивает устройство обратно в портретный режим, и действие снова переходит в портретный режим.

Итак, вот как я заставляю ориентироваться:

public void onButtonClick()
{
    if (mLastOrientation == Configuration.ORIENTATION_LANDSCAPE)
    {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
    }

    else
    {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
    }
}

А вот обработка смены ориентации:

@Override
public void onConfigurationChanged(Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);

    int currentOrientation = newConfig.orientation;

    //
    // Some UI changes according to orientation .............
    //

    mLastOrientation = currentOrientation;


    // Here's where I'm allowing device orientation changes again
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}

Проблема в том, что когда я вызываю setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED), активность возвращается к текущей ориентации устройства, что приводит к неправильной работе принудительной ориентации.

Есть идеи, как это решить?

заранее спасибо!


person dor506    schedule 22.09.2013    source источник


Ответы (1)


onConfigurationChanged() может вызываться каждый раз, когда нажимается кнопка, я думаю, потому что вы меняете конфигурацию, поэтому, даже если вы устанавливаете ее либо на альбомную, либо на портретную, она возвращается к неопределенной! Попробуйте вставить setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); в onCreate() или что-то в этом роде, я думаю, это решит вашу проблему?

Нажата кнопка -> Ориентация изменена, подразумевается, что конфигурация изменена -> Триггеры onConfigurationChanged() -> Снова изменяет на UNSPECIFIED.

Если вы поместите это в onCreate(), это произойдет только один раз при запуске приложения.

person adarsh    schedule 22.09.2013