如何在React Native Android开发模式下禁用横向模式?

最后发布: 2015-12-03 23:37:41


问题

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

谢谢。

android react-native react-native-android
回答

android:screenOrientation="portrait"添加到android/app/src/main/AndroidManifest.xml文件中的activity部分,这样它最终看起来像这样:

<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


回答

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

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


回答

正如@ morenoh149所述,属性名称和值是android:screenOrientation =“portrait”。 React Native在Android文件夹下的项目目录中生成一个名为AndroidManifest.xml的文件。 在标签清单/应用程序/活动下的那个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>


回答

哈里莫雷诺的评论是正确的。 将其添加到“活动”部分的android / app / src / main / AndroidManifest.xml中。 也改变

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

android:configChanges="keyboard|keyboardHidden|screenSize"

删除方向,以便它不与添加的新行冲突, android:screenOrientation="portrait"


回答

2017年更新

除了上面发布的解决方案,如果您使用Expo构建您的应用程序(目前在React Native Blog上的官方指南中推荐),那么您只需将app.json orientation设置为“portrait”或“landscape”并使其在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中禁用旋转?


回答

您可以通过在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


回答

如果您使用react-native-navigation则接受的答案不起作用。 请改用:

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

这里查看文档。