Как заблокировать ориентацию экрана для телефона, а не для планшета? (Android) - PullRequest
16 голосов
/ 18 ноября 2011

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

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

Ответы [ 4 ]

12 голосов
/ 18 ноября 2011

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

Ориентация экрана блокировки (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 планшетом или телефоном, вам следует использовать это решение (различные вопросы и ответы по SO), https://stackoverflow.com/a/9308284/492624

11 голосов
/ 25 марта 2014

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

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

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

    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);
    }
2 голосов
/ 18 ноября 2011

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

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

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

Спасибо.

1 голос
/ 26 марта 2012

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

      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

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

...