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.

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

Edelstein Ubaldo
quelle
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
48

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

Fügen Sie android:screenOrientation="portrait"Ihrer Aktivität XML hinzu

Harry Moreno
quelle
1
Hat sich der Ansatz geändert? Bitte lassen Sie uns wissen, diese Apis ändern sich ständig
Harry Moreno
Stellen Sie sicher, dass Sie es in das Aktivitäts-Tag und nicht in das Anwendungs-Tag einfügen!
BoKKeR
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>

bret
quelle
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"

Mixophrygian
quelle
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?

rsp
quelle
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 .

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

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

Bhupendra Dangi
quelle