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


Answers:


135

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


我们是否必须为每项活动做到这一点?
itsashis4u

26
请注意,如果您使用ReactNativeNavigation,那么这对您不起作用。在startSingleScreenApp或startTabBasedApp的appStyle中设置“ orientation:'portrait'”。看一下这个线程,可能会有所帮助。
蝙蝠

4
您真的想使用sensorPortrait而不是portrait以便可以“颠倒”使用它。而且,如果您定位的是API 18+,则应使用userPortrait,因为如果用户的方向锁定,它将使用。请参阅该文档的详细信息:developer.android.com/guide/topics/manifest/...
约书亚品特

4
自您发表评论以来,@ Bat ReactNativeNavigation显然已更改,并且android:screenOrientation“答案”中建议的设置现在可以正常工作。
阿诺·施里弗


30

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


我最喜欢这个答案,因为它准确显示了更改的位置。
Renato

2
不起作用。我从模拟器更改了方向,应用程序视图也更改为横向
Ville Miekk-oja,

16

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

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

android:configChanges="keyboard|keyboardHidden|screenSize"

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


如果您想执行OP想要的操作,@ mixophrygian所说的内容没有错。这是完全禁用横向视图。但是,如果您希望应用程序中的某个位置让用户查看事物的风景,请不要删除它。不会有任何冲突(无论如何,也不会有冲突)。
混合大师Mike

12

2017更新

除了上面如果你使用世博会建立自己的应用程序(如官方指南目前推荐上张贴的解决方案做出反应母语博客),那么所有你需要的是一套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中禁用旋转?


8

如果您使用,则可接受的答案不起作用react-native-navigation。使用此代替:

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

此处检查文档。


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


这符合我仅在智能手机设备上锁定方向并在平板电脑上保持自由方向的需要,我只是在activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)之前进行了设备检查。
法比奥·帕尔梅拉

这是唯一对我有用的解决方案。更新AndroidManifest.xml没有效果;不知道我是否没有正确发布它。我发现我不得不打电话给setRequestedOrientationonActivityResumedonActivityStarted太。
z0r

0

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

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

看起来像这样

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.