我是android环境的新手。我知道iOS可以在Xcode中完成以禁用设备方向。如何在React Native Android中禁用横向模式或任何方向模式?
谢谢。
Answers:
添加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
sensorPortrait
而不是portrait
以便可以“颠倒”使用它。而且,如果您定位的是API 18+,则应使用userPortrait
,因为如果用户的方向锁定,它将使用。请参阅该文档的详细信息:developer.android.com/guide/topics/manifest/...
android:screenOrientation
“答案”中建议的设置现在可以正常工作。
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"
除了上面如果你使用世博会建立自己的应用程序(如官方指南目前推荐上张贴的解决方案做出反应母语博客),那么所有你需要的是一套orientation
在app.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中禁用旋转?
您可以通过在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
AndroidManifest.xml
没有效果;不知道我是否没有正确发布它。我发现我不得不打电话给setRequestedOrientation
在onActivityResumed
和onActivityStarted
太。
打开你的 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