Як вимкнути альбомний режим у режимі розробника 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.