Я хочу, чтобы мое приложение для Android работало только в портретном режиме?

359

Я хочу, чтобы мое приложение для Android работало только в портретном режиме? Как я могу это сделать?

Джеймс
источник

Ответы:

779

В манифесте установите это для всех ваших действий:

<activity android:name=".YourActivity"
    android:configChanges="orientation"
    android:screenOrientation="portrait"/>

Позволь мне объяснить:

  • С android:configChanges="orientation"вами скажете Android, что вы будете нести ответственность за изменения ориентации.
  • android:screenOrientation="portrait" Вы устанавливаете режим ориентации по умолчанию.
Cristian
источник
50
Не было бы замечательно, если бы мы могли установить «глобальную» ориентацию для ВСЕХ действий в Приложении? Похоже, у нас нет другого выбора, кроме как скопировать / вставить атрибут «портрет» на каждом мероприятии ...
Эдуардо Коэльо,
63
Достаточно установитьandroid:screenOrientation="portrait"
до
11
@EduardoCoelho вы можете сделать базовый класс PortraitActivityи в вызове onCreate setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)Все действия, расширяющие это, не будут вращаться
Twinone
1
@Twinone: Как насчет того, когда разные виды деятельности хотят наследовать от разных подклассов Activity, например, от одного вида деятельности, ListActivityа у других просто Activity?
RestInPeace
3
@RestInPeace Да, хорошая мысль. Но я не ошибаюсь, просто Java не поддерживает множественное наследование :)
Twinone
57

В файле манифеста Android укажите атрибут, <activity>которыйandroid:screenOrientation="portrait"

Praveen
источник
2
Позвольте мне добавить: из Android Sudio 3.6 необходимо использовать android: screenOrientation = "fullSensor" или android: screenOrientation = "unspecified". fullSensor Означает, что у вас включено «Отключить» или нет, это изменит ориентацию в зависимости от вашего перемещения телефона. не определено Означает, что если у вас ВКЛЮЧЕНО «Поворот», то он останется только в этой ориентации, а если нет, то изменит ориентацию в зависимости от вашего перемещения телефона.
Киргудак
24

Есть два способа,

  1. Добавить android:screenOrientation="portrait"для каждого действия в файле манифеста
  2. Добавьте this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);в каждый файл Java.
Android Code Solution
источник
14
Второй вариант имеет ужасный побочный эффект - он возобновит вашу деятельность при запуске в Portrait.
Иоаким
4

в манифесте:

<activity android:name=".activity.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>

или: в MainActivity

@SuppressLint("SourceLockedOrientationActivity")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Мейсам Кешвари
источник
Я получаю app/src/main/AndroidManifest.xml; lineNumber: 20; columnNumber: 50; The prefix "tools" for attribute "tools:ignore" associated with an element type "activity" is not bound.. Добавление xmlns:tools="http://schemas.android.com/tools"в корневой элемент решает проблему
Żabojad
3

Старый пост я знаю. Чтобы приложение всегда работало в портретном режиме, даже если ориентация может быть или поменялась местами и т. Д. (Например, на планшетах), я разработал эту функцию, которая используется для установки устройства в правильной ориентации без необходимости знать, как портрет и пейзаж функции организованы на устройстве.

   private void initActivityScreenOrientPortrait()
    {
        // Avoid screen rotations (use the manifests android:screenOrientation setting)
        // Set this to nosensor or potrait

        // Set window fullscreen
        this.activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        DisplayMetrics metrics = new DisplayMetrics();
        this.activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);

         // Test if it is VISUAL in portrait mode by simply checking it's size
        boolean bIsVisualPortrait = ( metrics.heightPixels >= metrics.widthPixels ); 

        if( !bIsVisualPortrait )
        { 
            // Swap the orientation to match the VISUAL portrait mode
            if( this.activity.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT )
             { this.activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); }
            else { this.activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT ); }
        }
        else { this.activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); }

    }

Работает как шарм!

ВНИМАНИЕ: измените this.activityсвою деятельность или добавьте ее в основную деятельность и удалите this.activity;-)

Codebeat
источник
-5

я использую

 android:screenOrientation="nosensor"

Это полезно, если вы не хотите поддерживать портретный режим вверх ногами.

user2305886
источник
если это делает то, что я думаю, это не заставляет экран делать портрет, что вы, возможно, захотите сделать.
Ласси Киннунен
почему бы вам просто не удалить этот комментарий! это не имеет смысла
Александр Залдостанов
В Android Manifest File просто добавить атрибут для <деятельности> , что Android: screenOrientation = "портрет"
Авинаш Shinde
Спасибо за ваш ответ, это полезно для меня.
Md. Shofiulla