Як вимкнути альбомний режим у режимі розробника React Native Android?


76

Я новачок в середовищі Android. Я знаю, що iOS можна зробити в Xcode, щоб вимкнути орієнтацію пристрою. Як можна вимкнути альбомний режим або будь-який режим орієнтації в React Native Android?

Дякую.


Думаю, ви можете вимкнути його з файлу маніфесту ...
— RajSharma


1. Відкрийте YourProject -> android -> додаток -> src -> main -> AndroidManifest.xml 2. Помістіть android: screenOrientation = “portrait” в тег <application> Ви можете побачити тут aboutreact.com/react-native-disable- обертання екрану
— snehal agrawal

Відповіді:


135

Додайте android:screenOrientation="portrait"до activityрозділу у android/app/src/main/AndroidManifest.xmlфайлі, щоб він закінчився виглядати так:

<activity
    android:name=".Activity"
    android:label="Activity"
    android:screenOrientation="portrait"
    android:configChanges="keyboardHidden|orientation|screenSize">
</activity>

Існує кілька різних значень android:screenOrientationвластивості; для вичерпного списку подивіться наступне: https://developer.android.com/guide/topics/manifest/activity-element.html


Чи потрібно це робити для кожної діяльності?
— itsashis4u

26
Будьте обережні, якщо ви використовуєте ReactNativeNavigation, це не працює для вас. Встановіть "орієнтацію: 'портрет'" у вашому appStyle у startSingleScreenApp або startTabBasedApp. Погляньте на цю тему , це може допомогти.
— Бат

4
Ви дійсно хочете використовувати sensorPortraitзамість того, portraitщоб його можна було використовувати також "догори дном". І якщо ви націлюєтесь на API 18+, вам слід скористатися userPortrait, оскільки це буде поважати, якщо користувач заблокував орієнтацію. Докладнішу інформацію див. У документах: developer.android.com/guide/topics/manifest/…
— Джошуа Пінтер,

4
@Bat ReactNativeNavigation, мабуть, змінився з моменту вашого коментаря, і налаштування, android:screenOrientationяк пропонується у відповіді, зараз працюють нормально.
— Арнольд Шрейвер

48

http://developer.android.com/guide/topics/manifest/activity-element.html

додати android:screenOrientation="portrait"до вашої діяльності xml


1
чи змінився підхід? будь ласка, дайте нам знати, ці АПІ постійно змінюються
— Гаррі Морено,

Обов’язково помістіть його в тег активності, а не в тег програми!
— BoKKeR

30

Як @ morenoh149 зазначив вище, назва і значення властивості для цього - це android: screenOrientation = "portrait". React Native генерує файл під назвою AndroidManifest.xml у каталозі вашого проекту в папці Android. До цього файлу xml під тегом маніфест / додаток / активність ви додасте рядок android: screenOrientation = "portrait"

Приклад наведено нижче

<uses-permission android:name="android.permission.INTERNET" />

<application
  android:allowBackup="true"
  android:label="@string/app_name"
  android:icon="@mipmap/ic_launcher"
  android:theme="@style/AppTheme">
  <activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:screenOrientation="portrait" 
    android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
  </activity>
  <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
</application>


Ця відповідь мені найбільше подобається, оскільки вона показує, куди саме вносити зміни.
— Ренато Назад

2
Не працює. Я
— змінюю

16

Коментар Гаррі Морено правильний. Додайте його до android / app / src / main / AndroidManifest.xml у розділі "активність". Також зміни

android:configChanges="keyboard|keyboardHidden|orientation|screenSize"

до android:configChanges="keyboard|keyboardHidden|screenSize"

видалення орієнтації, щоб вона не суперечила новому доданому рядку, android:screenOrientation="portrait"


Нічого поганого в тому, що каже @mixophrygian, якщо ви хочете робити те, що хоче ОП. Що означає повністю вимкнути пейзаж. Однак якщо десь у вашому додатку ви хочете, щоб користувач переглядав пейзаж, тоді не видаляйте його. Конфлікту не буде (також не буде конфлікту, якщо залишити це незалежно).
— Майстер міксу Майк

12

Оновлення за 2017 рік

На додаток до рішень , розміщені вище , якщо ви використовуєте Expo , щоб побудувати ваш додаток (як в даний час рекомендується в офіційних інструкціях по Реагувати Native блог ) , то все , що вам потрібно , це задати orientationв app.jsonдо «портрета» або «пейзаж» і зробити його роботу як на iOS, так і на Android одночасно, не потребуючи редагування конфігураційних файлів XML для iOS / Android:

"orientation": "portrait"

Приклад:

{
  "expo": {
    "name": "My app",
    "slug": "my-app",
    "sdkVersion": "21.0.0",
    "privacy": "public",
    "orientation": "portrait"
  }
}

Ви також можете використовувати це під час виконання:

ScreenOrientation.allow()

Приклад:

ScreenOrientation.allow(ScreenOrientation.Orientation.PORTRAIT);

Детальніше:

Для отримання додаткової інформації див .: Як вимкнути обертання в React Native?


9

Прийнята відповідь не працює, якщо ви використовуєте react-native-navigation. Використовуйте замість цього:

Navigation.setDefaultOptions({
    layout: {
        orientation: ["portrait"],
    },
});

Перевірте документи тут .


4

Ви можете просто застосувати логіку, додавши зворотний виклик життєвого циклу до ReactApplicationкласу:

public class MyApplication extends Application{

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

  registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle bundle) {
                // Here we specify to force portrait at each start of any Activity
                activity.setRequestedOrientation(
                        ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

            }

            @Override
            public void onActivityStarted(Activity activity) {

            }

            @Override
            public void onActivityResumed(Activity activity) {

            }

            @Override
            public void onActivityPaused(Activity activity) {

            }

            @Override
            public void onActivityStopped(Activity activity) {

            }

            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {

            }

            @Override
            public void onActivityDestroyed(Activity activity) {

            }
        });
}

Тому вам не потрібно налаштовувати AndroidManifest


Це відповідає моїм потребам зафіксувати орієнтацію лише на пристроях смартфонів і залишатись вільною орієнтацією на планшетах, я щойно перевірив пристрій перед Activity.setReantedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
— Фабіо Пальмейра,

Це було єдине рішення, яке працювало для мене. Оновлення AndroidManifest.xmlне мало ефекту; не впевнений, що я просто не публікував його належним чином. Я знайшов , що я повинен був дзвонити setRequestedOrientationв onActivityResumedі onActivityStartedтеж.
— z0r

0

Просто відкрийте свій android/app/src/main/AndroidManifest.xml

І додайте цей рядок android:screenOrientation="portrait"і android:configChanges="keyboard|keyboardHidden|orientation|screenSize всередині розділу активності

Це виглядає приблизно так

 <activity
      android:name=".Activity"
      android:theme="@style/SplashTheme"
      android:label="@string/app_name"
      android:screenOrientation="portrait"
      android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
     .....your other stuff
 </activity>

Якщо це не спрацьовує, ви можете скористатися реакцією-рідною орієнтацією

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