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

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

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

4 ответа

Решение

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

Ориентация экрана блокировки (Android)
http://developer.android.com/reference/android/app/Activity.html

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

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

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


Чтобы определить, является ли устройство Android планшетом или телефоном, вам следует использовать это решение (другие вопросы и ответы по SO), /questions/15605755/opredelit-yavlyaetsya-li-ustrojstvo-smartfonom-ili-planshetom/15605787#15605787

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

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

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

    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);
    }

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

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

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

Благодарю.

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

      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

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

Другие вопросы по тегам