Как я могу проверить, находится ли телефон Android в альбомной или книжной ориентации?
java
android
orientation
Мохит Дешпанде
источник
источник
Ответы:
Текущая конфигурация, используемая для определения, какие ресурсы получить, доступна из
Configuration
объекта Resources :Вы можете проверить ориентацию, посмотрев на ее значение:
Более подробную информацию можно найти в Android Developer .
источник
android:screenOrientation="portrait"
), этот метод возвращает одно и то же значение независимо от того, как пользователь поворачивает устройство. В этом случае вы бы использовали акселерометр или гравитационный датчик для правильного определения ориентации.Если на некоторых устройствах вы используете ориентацию getResources (). GetConfiguration (). Вы ошибетесь. Мы использовали этот подход изначально в http://apphance.com . Благодаря удаленному ведению журнала Apphance мы могли видеть его на разных устройствах, и мы увидели, что фрагментация играет здесь свою роль. Я видел странные случаи: например, чередование портрета и квадрата (?!) в HTC Desire HD:
или вообще не менять ориентацию:
С другой стороны, width () и height () всегда корректны (они используются оконным менеджером, так что должно быть лучше). Я бы сказал, что лучшая идея - ВСЕГДА проверять ширину / высоту. Если вы думаете о мгновении, это именно то, что вы хотите - узнать, если ширина меньше высоты (портрет), наоборот (пейзаж) или они одинаковы (квадрат).
Тогда все сводится к следующему простому коду:
источник
getWidth
иgetHeight
не устарели.getSize(Point outSize)
вместо этого. Я использую API 23.Другой способ решения этой проблемы - не полагаться на правильное возвращаемое значение с дисплея, а полагаться на разрешение ресурсов Android.
Создайте файл
layouts.xml
в папкахres/values-land
иres/values-port
со следующим содержанием:Рез / ценности-земля / layouts.xml:
RES / значения порта / layouts.xml:
В исходном коде вы можете получить доступ к текущей ориентации следующим образом:
источник
Полный способ указать текущую ориентацию телефона:
Шеар Бин Нгуен
источник
getOrientation()
работает, но это не правильно, если использоватьgetRotation()
. Получить"Returns the rotation of the screen from its "natural" orientation."
источник вращения . Таким образом, на телефоне, говорящем, что ROTATION_0 является портретом, вероятно, правильно, но на планшете его "естественная" ориентация скорее всего альбомная, и ROTATION_0 должен возвращать альбомную ориентацию вместо портретной.Вот пример кода, как получить ориентацию экрана, рекомендованный hackbod и Martijn :
❶ Триггер при изменении ориентации:
❷ Получить текущую ориентацию, как рекомендуют hackbod :
AreЕсть альтернативное решение для получения текущей ориентации экрана ❷ придерживайтесь решения Martijn :
★ Примечание : я пробовал использовать оба варианта ❷ & ❸, но в RealDevice (NexusOne SDK 2.3) ориентация возвращает неправильную ориентацию.
★ Поэтому я рекомендую использовать решение ❷, чтобы получить ориентацию экрана, которая имеет больше преимуществ: четко, просто и работает как шарм.
★ Тщательно проверяйте возврат ориентации, чтобы убедиться в правильности наших ожиданий (может быть ограничено в зависимости от спецификации физических устройств)
Надеюсь, это поможет,
источник
источник
Используйте
getResources().getConfiguration().orientation
это правильный путь.Вам просто нужно следить за различными типами ландшафта, ландшафтом, который обычно использует устройство, и другим.
Все еще не понимаю, как справиться с этим.
источник
Прошло некоторое время с тех пор, как большинство этих ответов было опубликовано, а некоторые используют устаревшие методы и константы.
Я обновил код Jarek, чтобы больше не использовать эти методы и константы:
Обратите внимание, что режим
Configuration.ORIENTATION_SQUARE
больше не поддерживается.Я обнаружил, что это надежно на всех устройствах, на которых я тестировал, в отличие от метода, предполагающего использование
getResources().getConfiguration().orientation
источник
Проверьте ориентацию экрана во время выполнения.
источник
Есть еще один способ сделать это:
источник
Android SDK может сказать вам это очень хорошо:
источник
Протестировано в 2019 году на API 28, независимо от того, установил ли пользователь книжную ориентацию или нет, и с минимальным кодом по сравнению с другим устаревшим ответом , следующее обеспечивает правильную ориентацию:
источник
Я думаю, что этот код может работать после вступления в силу изменения ориентации
переопределите функцию Activity.onConfigurationChanged (Configuration newConfig) и используйте newConfig, direction, если вы хотите получать уведомление о новой ориентации перед вызовом setContentView.
источник
я думаю, что использование getRotationv () не помогает, потому что http://developer.android.com/reference/android/view/Display.html#getRotation%28%29 getRotation () Возвращает поворот экрана из его «естественного» ориентации.
поэтому, если вы не знаете «естественную» ориентацию, вращение не имеет смысла.
я нашел более простой способ,
подскажите пожалуйста, есть ли проблемы с этим кем-то?
источник
такой это наложение всех телефонов, таких как oneplus3
правильный код следующим образом:
источник
Старый пост я знаю. Какой бы ориентацией ни была или поменялась местами и т. Д. Я разработал эту функцию, которая используется для установки устройства в правильную ориентацию без необходимости знать, как на устройстве организованы портретные и альбомные функции.
Работает как шарм!
источник
Используйте этот способ,
в строке есть ориентация
источник
Есть много способов сделать это, этот кусок кода работает для меня
источник
Я думаю, что это решение легко
источник
Просто простой двухстрочный код
источник
Просто и легко :)
В файле Java напишите:
в
onCreate
методе и передsetContentView
записью:источник
Стоит также отметить, что в настоящее время существует менее веская причина проверять явную ориентацию,
getResources().getConfiguration().orientation
если вы делаете это по причинам компоновки, поскольку поддержка многооконных окон, представленная в Android 7 / API 24+, может немного испортить ваши макеты. ориентации. Лучше рассмотреть возможность использования<ConstraintLayout>
и альтернативных макетов, зависящих от доступной ширины или высоты , а также других приемов для определения того, какой макет используется, например, наличие или отсутствие определенных фрагментов, прикрепленных к вашей деятельности.источник
Вы можете использовать это (на основе здесь ):
источник