Як заблокувати орієнтацію програми Android на портрет у телефонах та пейзаж у планшетах?


83

Я розробляю додаток для Android, орієнтацію якого я не хочу змінювати на альбомний режим, коли користувач обертає пристрій. Крім того, я хочу, щоб заблокована орієнтація була в портретному режимі на телефонах і в альбомному режимі на планшетах. Чи можна цього досягти, якщо так, то як? Дякую.


2
@CommonsWare: У моїй програмі є меню з довгими списками, які набагато ефективніше проходять у портретному режимі на телефонах.
Ankit Rawat

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"

щоб програма не змінювала режим при виклику клавіатури.



0
android:screenOrientation="locked"

в <application>для всіх додатків в <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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.