Android — принудительная ориентация только на смартфонах

В моем приложении 3 экрана, и все они должны быть только портретными для смартфонов и обеими ориентациями для планшетов.

Теперь я использовал следующий код в OnCreate:

if (!getResources().getBoolean(R.bool.isTablet)) {
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

Однако, если я держу смартфон в ландшафтном режиме и запускаю приложение, оно будет отображаться в альбомной ориентации в течение нескольких секунд, а затем поворачиваться в портретную.

Многие ответы здесь предлагают заблокировать ориентацию через манифест, но это заблокирует ориентацию на планшетах, что нежелательно.

Буду очень признателен за любую информацию, которая приведет меня к решению. Спасибо.


comment
Когда вы вызываете этот код? Попробуйте сделать это до вызова setContentView(), если вы еще этого не сделали.   -  person Kevin Coppock    schedule 26.10.2012
comment
Это делается в первой строке внутри onCreate перед setContentView().   -  person Saito Mea    schedule 26.10.2012


Ответы (1)


Вы можете заблокировать его в манифесте, а затем разблокировать кодом, если это планшет.

Это может не иметь значения для вашего случая, но я читал, что Nexus 7 не сообщает о себе как о планшете, используя метод, который вы делаете. Я не уверен, что это точно, хотя сам никогда не пробовал.

person Ralgha    schedule 26.10.2012
comment
Что именно я должен сделать, чтобы разблокировать в коде? setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)? Потому что я думаю, что это создаст обратный эффект на планшетах, они будут загружаться как портрет, а затем поворачиваться в ландшафт. Кстати, для определения, является ли устройство планшетом, я проверяю размер экрана, большие устройства и выше, устанавливая для логического ресурса isTablet значение true. - person Saito Mea; 26.10.2012
comment
О, я думал, вы используете какое-то встроенное логическое значение, о котором я слышал слухи. Это может вызвать обратный эффект в таблетках, но я не могу придумать другого способа сделать это. У вас может быть экран-заставка при запуске вашего приложения, выяснение требований к ориентации во время его отображения, а затем переход к реальному приложению, как только это будет выяснено. - person Ralgha; 26.10.2012
comment
Один из экранов уже является заставкой, где возникает проблема. - person Saito Mea; 26.10.2012