85

我是android环境的新手。我知道 iOS 可以在 Xcode 中完成以禁用设备方向。如何在 React Native Android 中禁用横向模式或任何方向模式?

谢谢。

4

9 回答 9

143

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

于 2015-12-04T11:01:19.970 回答
48

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

添加android:screenOrientation="portrait"到您的活动 xml

于 2015-12-31T16:36:43.553 回答
31

正如@morenoh149 所述,执行此操作的属性名称和值是 android:screenOrientation="portrait"。React Native 会在你的项目目录中 Android 文件夹下生成一个名为 AndroidManifest.xml 的文件。在标签 manifest/application/activity 下的该 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>

于 2016-04-18T15:04:47.113 回答
16

Harry Moreno's comment is correct. Add it to android/app/src/main/AndroidManifest.xml in the 'activity' section. Also change

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

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

removing orientation so it doesn't conflict with the new line added, android:screenOrientation="portrait"

于 2016-08-01T01:35:24.657 回答
13

2017 更新

除了上面发布的解决方案,如果您使用 Expo 来构建您的应用程序(目前在React Native Blog的官方指南中推荐),那么您只需设置orientationapp.json纵向”或“横向”并使其工作同时在 iOS 和 Android 上,无需编辑 iOS/Android 特定的 XML 配置文件:

"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 中禁用旋转?

于 2017-10-10T16:44:23.847 回答
12

如果您使用的是react-native-navigation. 改用这个:

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

在此处查看文档。

于 2019-03-26T10:40:05.077 回答
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

于 2017-03-27T06:20:57.360 回答
0

只需打开你的android/app/src/main/AndroidManifest.xml

并添加此行android:screenOrientation="portrait"android:configChanges="keyboard|keyboardHidden|orientation|screenSize 内部活动部分

它看起来像那样

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

如果它不起作用,则可以使用 react-native-orientation

于 2020-10-21T12:12:37.720 回答
0

对于 React Native Navigation,它可以通过定义方向来修复,如下所述

Navigation.setDefaultOptions({
  layout: {
    orientation: ['portrait']
  }
});
于 2021-05-14T13:19:01.513 回答