web-dev-qa-db-fra.com

Comment désactiver le mode paysage dans React Natif Android mode dev?

Je suis nouveau dans l'environnement Android. Je sais qu'iOS peut être installé dans Xcode pour désactiver l'orientation du périphérique. Comment puis-je désactiver le mode paysage ou tout mode d'orientation dans React Android natif?

Merci.

61
sungl

Ajouter Android:screenOrientation="portrait" à la section activity de Android/app/src/main/AndroidManifest.xml fichier, pour qu’il ressemble à ceci:

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

Il existe plusieurs valeurs différentes pour le Android:screenOrientation propriété; Pour une liste complète, consultez les éléments suivants: https://developer.Android.com/guide/topics/manifest/activity-element.html

109
Gem Ubaldo

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

ajouter Android:screenOrientation="portrait" à votre activité xml

44
Harry Moreno

Comme @ morenoh149 l'a indiqué ci-dessus, le nom de la propriété et la valeur à utiliser sont Android: screenOrientation = "portrait". React Native génère un fichier appelé AndroidManifest.xml dans le répertoire de votre projet, sous le dossier Android. Dans ce fichier xml, vous trouverez le tag manifeste/application/activité ajouter la ligne Android: screenOrientation = "portrait"

Un exemple est montré ci-dessous

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

Le commentaire de Harry Moreno est correct. Ajoutez-le à Android/app/src/main/AndroidManifest.xml dans la section 'activité'. Aussi changer

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

à Android:configChanges="keyboard|keyboardHidden|screenSize"

en supprimant l'orientation pour qu'il ne soit pas en conflit avec la nouvelle ligne ajoutée, Android:screenOrientation="portrait"

14
mixophrygian

Mise à jour 2017

En plus des solutions indiquées ci-dessus, si vous utilisez Expo pour créer votre application (comme recommandé dans les guides officiels sur React Native Blog ), il vous suffit de définir orientation dans app.json pour "portrait" ou "paysage" et le faire fonctionner à la fois sur iOS et Android en même temps, sans qu'il soit nécessaire de modifier les fichiers de configuration XML spécifiques à iOS/Android :

"orientation": "portrait"

Exemple:

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

Vous pouvez également l'utiliser au moment de l'exécution:

ScreenOrientation.allow()

Exemple:

ScreenOrientation.allow(ScreenOrientation.Orientation.PORTRAIT);

Plus de détails:

Pour plus d'informations, voir: comment désactiver la rotation dans React Natif?

10
rsp

Vous pouvez simplement utiliser cette logique en ajoutant un rappel de cycle de vie dans la classe 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) {

            }
        });
}

Donc, vous n'avez pas besoin de configurer AndroidManifest

4
odemolliens

La réponse acceptée ne fonctionne pas si vous utilisez react-native-navigation. Utilisez ceci à la place:

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

Vérifiez la documentation ici .

3
romin21