Wie deaktiviere ich den Querformatmodus im React Native Android Dev-Modus?


76

Ich bin neu in der Android-Umgebung. Ich weiß, dass iOS in Xcode ausgeführt werden kann, um die Geräteorientierung zu deaktivieren. Wie kann ich den Querformatmodus oder einen beliebigen Orientierungsmodus in React Native Android deaktivieren?

Vielen Dank.


Ich denke, Sie können es aus der Manifest-Datei deaktivieren ...
RajSharma


1. Öffnen Sie IhrProjekt -> Android -> app -> src -> main -> AndroidManifest.xml 2. Setzen android: screenOrientation = „Portrait“ in <application> -Tag Sie hier sehen können aboutreact.com/react-native-disable- Bildschirmrotation
Snehal Agrawal

Antworten:


135

Fügen Sie android:screenOrientation="portrait"dem activityAbschnitt in der android/app/src/main/AndroidManifest.xmlDatei hinzu, sodass er am Ende folgendermaßen aussieht:

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

Es gibt verschiedene Werte für die android:screenOrientationEigenschaft. Eine umfassende Liste finden Sie unter: https://developer.android.com/guide/topics/manifest/activity-element.html


Müssen wir es für jede Aktivität tun?
itsashis4u

26
Seien Sie vorsichtig, wenn Sie ReactNativeNavigation verwenden, funktioniert dies bei Ihnen nicht. Stellen Sie "Ausrichtung: 'Porträt'" in Ihrem AppStyle in startSingleScreenApp oder startTabBasedApp ein. Schauen Sie sich diesen Thread an , es kann helfen.
Fledermaus

4
Sie möchten wirklich verwenden, sensorPortraitanstatt, portraitdamit es auch "verkehrt herum" verwendet werden kann. Wenn Sie auf API 18+ abzielen, sollten Sie diese verwenden userPortrait, da dies berücksichtigt, ob der Benutzer die Ausrichtung gesperrt hat. Weitere Informationen finden Sie in den Dokumenten: developer.android.com/guide/topics/manifest/…
Joshua Pinter

4
@Bat ReactNativeNavigation hat sich anscheinend seit Ihrem Kommentar geändert, und die android:screenOrientationin der Antwort vorgeschlagene Einstellung funktioniert jetzt einwandfrei .
Arnold Schrijver


30

Wie @ morenoh149 oben angegeben hat, ist der Name und der Wert der Eigenschaft dafür android: screenOrientation = "Porträt". React Native generiert eine Datei namens AndroidManifest.xml in Ihrem Projektverzeichnis unter dem Android-Ordner. Innerhalb dieser XML-Datei unter dem Tag Manifest / Anwendung / Aktivität würden Sie die Zeile hinzufügen android : screenOrientation = "Porträt"

Ein Beispiel ist unten gezeigt

<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>


Diese Antwort gefällt mir am besten, weil sie genau zeigt, wo Änderungen vorgenommen werden müssen.
Renato Zurück

2
Funktioniert nicht. Ich ändere die Ausrichtung vom Emulator und die App-Ansicht ändert sich zur Landschaft
Ville Miekk-oja

16

Harry Morenos Kommentar ist richtig. Fügen Sie es zu Android / app / src / main / AndroidManifest.xml im Abschnitt "Aktivität" hinzu. Auch ändern

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

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

Entfernen der Ausrichtung, damit kein Konflikt mit der neu hinzugefügten Zeile auftritt. android:screenOrientation="portrait"


Es ist nichts falsch daran, was @mixophrygian sagt, wenn Sie tun möchten, was OP will. Welches ist, um die Landschaftsansicht vollständig zu deaktivieren. Wenn der Benutzer jedoch irgendwo in Ihrer App die Landschaft anzeigen soll, entfernen Sie sie nicht. Es wird keinen Konflikt geben (es gibt auch keinen Konflikt, wenn Sie dies unabhängig davon belassen).
Mix Master Mike

12

Update 2017

Zusätzlich zu den gebuchten Lösungen oben , wenn Sie Expo verwenden Ihre App zu bauen (wie sie derzeit in der offiziellen Reiseführern empfohlen wird auf india Blog Reagieren ) , dann brauchen Sie ist zu Satz orientationin app.jsonzu „Portrait“ oder „Landschaft“ und es funktioniert auf iOS und Android gleichzeitig, ohne dass iOS / Android-spezifische XML-Konfigurationsdateien bearbeitet werden müssen:

"orientation": "portrait"

Beispiel:

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

Sie können dies auch zur Laufzeit verwenden:

ScreenOrientation.allow()

Beispiel:

ScreenOrientation.allow(ScreenOrientation.Orientation.PORTRAIT);

Mehr Details:

Weitere Informationen finden Sie unter: Deaktivieren der Rotation in React Native?


8

Die akzeptierte Antwort funktioniert nicht, wenn Sie verwenden react-native-navigation. Verwenden Sie stattdessen Folgendes:

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

Überprüfen Sie die Dokumente hier .


4

Sie können die Logik einfach durch Hinzufügen eines Lebenszyklus-Rückrufs in der ReactApplicationKlasse festlegen :

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) {

            }
        });
}

Sie müssen also nicht konfigurieren AndroidManifest


Dies passte zu meinen Anforderungen, die Ausrichtung nur auf Smartphone-Geräten zu sperren und die freie Ausrichtung auf Tablets beizubehalten. Ich habe gerade vor der Aktivität eine Geräteprüfung durchgeführt. SetRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Fábio Palmeira

Dies war die einzige Lösung, die für mich funktioniert hat. Die Aktualisierung AndroidManifest.xmlhatte keine Auswirkungen. Ich bin mir nicht sicher, ob ich es einfach nicht richtig veröffentlicht habe. Ich fand ich musste rufen setRequestedOrientationin onActivityResumedund onActivityStartedzu.
z0r

0

Öffnen Sie einfach Ihre android/app/src/main/AndroidManifest.xml

Fügen Sie diese Zeile android:screenOrientation="portrait"und den android:configChanges="keyboard|keyboardHidden|orientation|screenSize Abschnitt mit den Aktivitäten hinzu

Es sieht ungefähr so ​​aus

 <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>

Wenn es nicht funktioniert, können Sie die reaktionsnative Ausrichtung verwenden

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.