Как настроить все приложение только в портретном режиме? - PullRequest
196 голосов
/ 19 июля 2011

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

Ответы [ 15 ]

286 голосов
/ 19 июля 2011

Для любой версии Android

Из XML

Вы можете указать android:screenOrientation="portrait" для каждого действия в файле manifest.xml. Вы не можете указать эту опцию для тега application.

с Java

Другой вариант - сделать это программно, например, в базовом классе Activity:

@Override
public void onCreate(Bundle savedInstanceState) {
  setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

Для Android 4+ (API 14 +)

Последний вариант - сделать это со слушателями жизненного цикла активности, которые доступны только с Android 4.0 (API 14+). Все происходит в пользовательском Application классе:

@Override
public void onCreate() {
    super.onCreate();  
    registerActivityLifecycleCallbacks(new ActivityLifecycleAdapter() {
        @Override
        public void onActivityCreated(Activity a, Bundle savedInstanceState) {
            a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
    });
}

ActivityLifecycleAdapter - это просто вспомогательный класс, который вам нужно создать и который будет пустой реализацией ActivityLifecycleCallbacks (поэтому вам не нужно переопределять каждый метод этого интерфейса, когда вам просто нужен один из них ).

137 голосов
/ 20 марта 2012

Да, вы можете делать это как программно, так и для всех ваших действий, создавая AbstractActivity, который расширяет все ваши действия.

public abstract class AbstractActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }
}

Это абстрактное действие также можно использовать для глобального меню.

93 голосов
/ 18 июля 2014

Вы можете сделать это для всего приложения без , заставляя все ваши действия расширять общий базовый класс.

Сначала нужно убедиться, что вы включили в свой подкласс Application. В его onCreate(), вызываемом при первом запуске приложения, вы регистрируете объект ActivityLifecycleCallbacks (уровень API 14+) для получения уведомлений о событиях жизненного цикла активности.

Это дает вам возможность выполнять свой собственный код всякий раз, когда любая активность в вашем приложении запускается (или останавливается, или возобновляется, или как угодно). На данный момент вы можете позвонить setRequestedOrientation() на вновь созданную деятельность.

class MyApp extends Application {

    @Override
    public void onCreate() {
        super.onCreate();  

        // register to be informed of activities starting up
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {

            @Override
            public void onActivityCreated(Activity activity, 
                                          Bundle savedInstanceState) {

                // new activity created; force its orientation to portrait
                activity.setRequestedOrientation(
                    ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

            }

            ....

        });

    }
}
40 голосов
/ 19 июля 2011

Вы можете установить это в своем файле манифеста ..

android:name=".your launching activity name"
android:screenOrientation="portrait"

и вы также можете достичь того же, написав код в файле класса, например:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
24 голосов
/ 19 июля 2011

Добавить андроид: screenOrientation = "портрет" к действию в AndroidManifest.xml. Например:

<activity android:name=".SomeActivity"
    android:label="@string/app_name"
    android:screenOrientation="portrait">
10 голосов
/ 23 ноября 2012

Использование:

android:screenOrientation="portrait" 

Просто запишите эту строку в файле манифеста вашего приложения в каждом упражнении, которое вы хотите показывать только в портретном режиме.

8 голосов
/ 19 июля 2011

Запишите это в свой файл манифеста, для каждого действия:

android:screenOrientation="portrait" 
2 голосов
/ 16 июля 2015

Начиная с руководства разработчика Android:

"ориентация" Ориентация экрана изменилась - пользователь повернул устройство.Примечание. Если ваше приложение предназначено для уровня API 13 или выше (как заявлено атрибутами minSdkVersion и targetSdkVersion), вам также следует объявить конфигурацию «screenSize», поскольку она также изменяется, когда устройство переключается между книжной и альбомной ориентациями.

"screenSize" Текущий доступный размер экрана изменился.Это представляет изменение доступного в настоящее время размера относительно текущего соотношения сторон, поэтому оно изменится, когда пользователь переключается между альбомным и портретным.Однако, если ваше приложение предназначено для уровня API 12 или ниже, то ваша активность всегда сама обрабатывает это изменение конфигурации (это изменение конфигурации не перезапускает вашу активность, даже при работе на устройстве Android 3.2 или выше).Добавлено в уровень API 13.

Итак, в файле AndroidManifest.xml мы можем поместить:

<activity
            android:name=".activities.role_activity.GeneralViewPagerActivity"
            android:label="@string/title_activity_general_view_pager"
            android:screenOrientation="portrait"
            android:configChanges="orientation|keyboardHidden|screenSize"
            >
        </activity> 
1 голос
/ 27 июля 2016

в файле манифеста, какое действие вы хотите использовать в "портрет" , вы должны написать этот код в теге активности

  android:screenOrientation="portrait" 

как этот

         android:icon="@drawable/icon"
        android:name="com.zemkoapps.hd.wallpaper.AndroidGridLayoutActivity" 
        android:screenOrientation="portrait" >

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

android:screenOrientation="landscape"
1 голос
/ 01 марта 2016

Добавление <preference name="orientation" value="portrait" /> в <widget> в моем config.xml работало для меня.

(Другие решения либо не работали на моем устройстве, были перезаписаны во время сборки или выдавали ошибки устаревания во время сборкипроцесс.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...