Как отключить ландшафтный режим в Android?

Как я могу отключить ландшафтный режим для некоторых видов в моем приложении Android?

Комментарии к вопросу (1)
Решение

Добавить < код > android: screenOrientation = "портрет" < / code > к активности в AndroidManifest.xml. Например:

РЕДАКТИРОВАТЬ: Поскольку это стало супер-популярным ответом, я чувствую себя очень виноватым, поскольку форсирование портрета редко является правильным решением проблем, к которым его часто применяют.& Лт; br > Основные предостережения с принудительным портретом:

  • Это не освобождает вас от необходимости думать о деятельности события жизненного цикла или правильное сохранение / восстановление состояния. Есть много вещи, кроме вращения приложения, которые могут вызвать активность разрушение / воссоздание, включая неизбежные вещи, такие как многозадачность. Там нет ярлыков; научиться использовать связки и фрагменты retainInstance.
  • Имейте в виду, что в отличие от довольно равномерного опыта iPhone, есть некоторые устройства, где портрет не является явно популярной ориентацией. Когда пользователи находятся на устройствах с аппаратными клавиатурами или игровыми площадками в стиле Nvidia Shield, на [Chromebook](https://support.google.com/chromebook/answer/7021273?hl = en), на складных или на [Samsung DeX] ( https://www.samsung.com/global/galaxy/apps/s/samsung-dex/), ограничивающий портрет может сделать ваш гигантский портрет. Если в вашем приложении нет сильного аргумента UX, который привел бы к негативному опыту поддержки других ориентаций, вам, вероятно, не следует форсировать ландшафт. Я говорю о таких вещах, как «это приложение для кассовых аппаратов для одной конкретной модели планшета, всегда используемой в фиксированной аппаратной док-станции.«

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

  • Если ваша главная проблема заключается в том, что случайная ориентация меняет среднюю активность, что, по вашему мнению, датчики и программное обеспечение устройства не справятся хорошо (например, в игре на основе наклона), рассмотрите возможность поддержки ландшафта и портрета, но с использованием «nosensor» для ориентация. Это заставляет задуматься о большинстве планшетов и портретных изображений на большинстве телефонов, но я все равно не рекомендовал бы это для большинства «нормальных» приложений (некоторые пользователи просто любят печатать на своих телефонах альбомную клавиатуру, а многие пользователи планшетов читают в портретном порядке - и ты должен позволить им).
  • Если вам все еще нужно форсировать портрет по какой-то причине, «sensorPortrait» может быть лучше, чем «портрет» для Android 2.3+; это позволяет использовать перевернутый портрет, который довольно часто встречается при использовании планшета.
Комментарии (12)

Я не знал о переключателе файлов AndroidManifest.xml до прочтения этого поста, поэтому в своих приложениях я использовал это вместо этого:

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);     //  Fixed Portrait orientation
Комментарии (3)

Добавьте этот android: screenOrientation = "portrait"в файл манифеста, где вы объявляете свою деятельность следующим образом

Если вы хотите сделать с помощью Java-кода, попробуйте

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

перед тем, как вы вызовете метод setContentView для вашей деятельности в onCreate ().

Надеюсь, что это поможет и легко понятно для всех...

Комментарии (0)

Многие ответы здесь предлагают использовать "portrait" в вашем файле AndroidManifest.xml. Это может показаться хорошим решением - но, как отмечено в документации, вы выделяете устройства, которые могут иметь только ландшафт. Вы также заставляете определенные устройства (которые лучше всего работают в пейзаже) идти в портрет, не получая надлежащей ориентации.

Я предлагаю использовать "nosensor"вместо. Это позволит устройству использовать предпочтительную ориентацию по умолчанию, не заблокирует покупки / загрузки в Google Play и обеспечит, чтобы датчик не испортил вашу (в моем случае NDK) игру.

Комментарии (2)

Если вы хотите настройки пользователя,

тогда я бы порекомендовал setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

Вы можете изменить настройки из меню настроек.

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

Комментарии (0)

Просто добавьте «Как эта линия» в свой манифест

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










Комментарии (0)

Используйте это в onCreate () Действия

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Комментарии (0)

Просто добавьте этот атрибут в свой тег активности.

 android:screenOrientation="portrait"
Комментарии (0)

Вы должны изменить android: screenOrientation = "sensorPortrait"в AndroidManifest.xml

Комментарии (1)

Если вы не 'Я не хочу лучше проходить через трудности добавления ориентации в каждом манифесте, создать класс BaseActivity (наследует 'Деятельность ' или № 39;AppCompatActivity ' который будет унаследован каждым действием вашего приложения вместо 'Деятельность ' или № 39;AppCompatActivity ' и просто добавьте следующий фрагмент кода в свой BaseActivity:

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    // rest of your code......
}
Комментарии (0)

Как изменить ориентацию в некоторых видах

Вместо того, чтобы блокировать ориентацию всей активности, вы можете использовать этот класс для динамической прагматической блокировки ориентации с любого вашего взгляда: -

Сделайте свой взгляд Пейзаж

OrientationUtils.lockOrientationLandscape(mActivity);

Сделайте свой вид Портрет

OrientationUtils.lockOrientationPortrait(mActivity);

Разблокировка Ориентация

OrientationUtils.unlockOrientation(mActivity);

Ориентация Util Class


import android.app.Activity;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.os.Build;
import android.view.Surface;
import android.view.WindowManager;

/*  * This class is used to lock orientation of android app in nay android devices 
 */

public class OrientationUtils {
    private OrientationUtils() {
    }

    /** Locks the device window in landscape mode. */
    public static void lockOrientationLandscape(Activity activity) {
        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
    }

    /** Locks the device window in portrait mode. */
    public static void lockOrientationPortrait(Activity activity) {
        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }

    /** Locks the device window in actual screen mode. */
    public static void lockOrientation(Activity activity) {
        final int orientation = activity.getResources().getConfiguration().orientation;
        final int rotation = ((WindowManager) activity.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay()
                .getRotation();

        // Copied from Android docs, since we don't have these values in Froyo
        // 2.2
        int SCREEN_ORIENTATION_REVERSE_LANDSCAPE = 8;
        int SCREEN_ORIENTATION_REVERSE_PORTRAIT = 9;

        // Build.VERSION.SDK_INT 
Комментарии (0)

Добавьте android: screenOrientation = "portrait"к активности, которую вы хотите отключить в ландшафтном режиме.

Комментарии (0)

Если вы хотите отключить Режим ландшафта для вашего приложения для Android (или одного действия), все, что вам нужно сделать, это добавить,

android: screenOrientation = "portrait" к тегу активности в файле AndroidManifest.xml .

Подобно:

Другой путь, Программный подход.

Если вы хотите сделать это программно, т.е. использование кода Java. Вы можете сделать это, добавив приведенный ниже код в класс Java активности, которую вы не хотите отображать в ландшафтном режиме.

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

Я надеюсь, что это поможет вам. Для получения более подробной информации вы можете посетить здесь введите описание ссылки здесь

Комментарии (2)

Вы должны установить ориентацию каждого действия.










Комментарии (0)

Вы можете заставить свою конкретную деятельность всегда оставаться в портретном режиме, написав это в своем манифесте.xml

Вы также можете заставить свою деятельность оставаться в режиме postrait, написав следующую строку в методе onCreate () вашей деятельности

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.your_layout);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

}
Комментарии (0)

Если вы используете Xamarin C #, некоторые из этих решений не будут работать. Вот решение, которое я нашел для работы.

[Activity(MainLauncher = true, Icon = "@drawable/icon", ScreenOrientation = ScreenOrientation.Portrait)]

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

Комментарии (0)

использовать

android:configChanges="keyboardHidden|orientation"
android:screenOrientation="portrait" 
Комментарии (0)

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

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

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

И не забудьте добавить app: name = ".MyApp" в файл манифеста.

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);
            }
            ....
        });
    }
}
Комментарии (0)

добавить класс внутри метода oncreate ()

 setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Комментарии (0)

    . . .

        . . .





Комментарии (0)