Как заблокировать ориентацию приложения Android на портретную ориентацию на телефонах и альбомную ориентацию на планшетах?

83

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

Анкит Рават
источник
2
@CommonsWare: В моем приложении есть меню с длинными списками, которые гораздо эффективнее перемещаться в режиме портретной съемки на телефонах.
Анкит Рават,
3
Затем придумайте лучший дизайн графического интерфейса, который уважает способность ваших пользователей использовать свои устройства в любой ориентации.
CommonsWare

Ответы:

157

Вам просто нужно определить свойство ниже внутри элемента активности в вашем AndroidManifest.xmlфайле. Это ограничит вашу ориентацию портретной.

android: screenOrientation = "портрет"

Пример:

        <activity
            android:name="com.example.demo_spinner.MainActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait" >
        </activity>

если вы хотите, чтобы это применялось ко всему приложению, определите свойство ниже внутри тега приложения следующим образом:

        <application>
         android:screenOrientation="sensorPortrait"
        </application>

Кроме того, согласно приведенному ниже комментарию Эдуарда Луки, вы также можете использовать, screenOrientation="sensorPortrait"если хотите включить поворот на 180 градусов.

Робин Гуд
источник
21
Или, sensorPortraitесли вы хотите, чтобы пользователь мог поворачивать экран на 180 градусов :)
Эдуард Лука
44

Вы должны добавить android:screenOrientation="portrait"директиву в свой AndroidManifest.xml. Это нужно сделать в вашем <activity>теге.

Кроме того, в руководстве для разработчиков Android говорится, что:

[...] вы также должны явно заявить, что вашему приложению требуется портретная или альбомная ориентация элемента. Например, <uses-feature android:name="android.hardware.screen.portrait" />.

Халим Каррум
источник
6
+1 за цитату о хорошей практике и потому, что это должен быть принятый ответ, поскольку он правильный и был опубликован первым ...
Эдуард Лука
7
Есть ли глобальный путь?
Тайлер Пфафф
21

Я вижу, вы приняли ответ, который не решает полностью вашу проблему:

android:screenOrientation="portrait" 

Это заставит ваше приложение быть портретным как на телефонах, так и на планшетах.

Вы можете принудительно установить приложение в «предпочтительной» ориентации устройства, используя

android:screenOrientation="nosensor"

Это приведет к тому, что ваше приложение будет работать в портретной ориентации на большинстве телефонов и на планшетах. Есть много телефонов с клавиатурами, которые предназначены для ландшафтного режима. Принуждение вашего приложения к портретной ориентации может сделать его практически непригодным для использования на таких устройствах. Android недавно также переходит на другие типы устройств. Лучше всего позволить устройству выбрать предпочтительную ориентацию.

Раду Симионеску
источник
Для тех, кому интересно узнать о настройке «носенсор», вы можете прочитать дополнительную информацию в официальных документах по адресу developer.android.com/guide/topics/manifest/activity-element
Джеймс Джордан Тейлор,
11

Это может быть ... вы должны программно определить, что это планшет или телефон ... Сначала проверьте, является ли устройство телефон или планшет

Определите, является ли устройство смартфоном или планшетом?

Планшет или телефон - Android

Потом......

if(isTablet)
{
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);      
}else
{
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
Бхавеш Хирпара
источник
Привет @Bhavesh, Он не работает на мобильном устройстве Android 9.
Manikandan K
как мы можем определить, что это таблетка ... вы не объяснили это ...
Абдул Вахид
Вы можете увидеть отредактированный ответ. Я включил, как определить, является ли устройство смартфоном или планшетом?
Бхавеш Хирпара,
3
<activity android:name=".yourActivity"
          android:screenOrientation="portrait" ... />

добавить в основную деятельность и добавить

android:configChanges="keyboardHidden"

чтобы ваша программа не меняла режим при вызове клавиатуры.

Sumodh S
источник
1

Установите книжную ориентацию экрана в файле манифеста под тегом активности.

Равиш Кумар
источник
0
android:screenOrientation="locked"

in <application>для всего приложения in <activity>для фактической активности

Антон Шихерт
источник
0

Установите книжную ориентацию экрана в файле манифеста под тегом активности.

Вот пример

Вам нужно войти в каждое действие

Добавить в действие следующие строки

для портрета

android:screenOrientation="portrait"
tools:ignore="LockedOrientationActivity"

для пейзажа

android:screenOrientation="landscape"
tools:ignore="LockedOrientationActivity"

Вот пример MainActivity

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="org.thcb.app">
 
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity"
            android:screenOrientation="portrait"
            tools:ignore="LockedOrientationActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

<activity android:name=".MainActivity2"
            android:screenOrientation="landscape"
            tools:ignore="LockedOrientationActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Четан
источник
-1

Просто добавь:

android:screenOrientation="portrait"

в " AndroidManifest.xml ":

<activity
android:screenOrientation="portrait"
android:name=".MainActivity"
android:label="@string/app_name">
</activity>
химаншу джайн
источник