Как заблокировать ориентацию экрана для телефона, но не для планшета? (Android)

Я работаю над проектом Android, который предназначен для совместимости с телефонами и планшетами Android. На планшете приложение отлично работает и хорошо выглядит. Тем не менее, по телефону мы сталкиваемся с проблемами как программно, так и макетными (работа с 10,1-дюймовым экраном намного проще, чем 4-дюймовый экран). Чтобы решить некоторые из этих проблем, мы решили отключить ориентацию экрана, но только для версии телефона, по крайней мере временно.

Вопрос прост: как отключить ориентацию экрана для телефона Android, сохраняя его активным для планшетов Android? Я знаю, что могу сделать это в файле манифеста, однако это также заблокирует ориентацию планшета, который я считаю.

Ответы

Ответ 1

Вы можете сделать это и из приложения.

Блокировка ориентации экрана (Android)
http://developer.android.com/reference/android/app/Activity.html#setRequestedOrientation (int)

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

И атрибуты можно найти здесь:

http://developer.android.com/reference/android/R.attr.html#screenOrientation


Чтобы обнаружить, если Android-устройство - Tablet или Phone, вы должны использовать это решение (разные SO Q & A), fooobar.com/questions/33132/...

Ответ 2

Прежде всего, постарайтесь не делать этого. Я выбрал это, потому что это было простое решение сложной проблемы. Но на самом деле постарайтесь не допустить этого.

Если вы действительно хотите это сделать, используйте следующий код.

В вашей деятельности создайте метод:

    private boolean isTablet() {
        return (this.getResources().getConfiguration().screenLayout
            & Configuration.SCREENLAYOUT_SIZE_MASK)
            >= Configuration.SCREENLAYOUT_SIZE_LARGE;
    }

И затем в вашем onCreate выполните следующее:

    if (!isTablet()) {
        // stop screen rotation on phones because <explain>
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    }

Ответ 3

Кажется, что это не невозможно, если вы обрабатываете это во время выполнения, получая размер экрана, а затем делаете RunTimeConfigurationChanges. Тогда может это вам помочь.

Попробуйте Обработка изменений времени выполнения.

И дайте мне знать, если вы получите успех на этом.

Спасибо.

Ответ 4

Один из способов - создать отдельные действия для версии телефона и версии планшета. И затем зафиксируйте их ориентации в файле манифеста android. Другой метод - проверить устройство, которое в настоящее время используется, и зафиксировать ориентацию в самой активности с помощью кода,

      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

Создание отдельных действий - лучший способ, поскольку его легко поддерживать вкладку и версии телефона.