Я новичок в среде Android. Я знаю, что iOS можно сделать в Xcode, чтобы отключить ориентацию устройства. Как отключить ландшафтный режим или любой режим ориентации в React Native Android?
Спасибо.
Я новичок в среде Android. Я знаю, что iOS можно сделать в Xcode, чтобы отключить ориентацию устройства. Как отключить ландшафтный режим или любой режим ориентации в React Native Android?
Спасибо.
Добавьте 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
http://developer.android.com/guide/topics/manifest/activity-element.html
добавить android:screenOrientation="portrait"
в свою активность xml
Как указано выше, имя свойства и значение для него указано как андроид: screenOrientation = "портрет". React Native создает файл под названием AndroidManifest.xml в каталоге проекта в папке Android. Внутри этого XML файла под тегом manifest/application/activity вы добавили строку 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"
Вы можете просто логику, добавив обратный вызов жизненного цикла в класс 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
В дополнение к решениям, опубликованным выше, если вы используете Expo для создания своего приложения (как это в настоящее время рекомендуется в официальных руководствах по React Native Blog), тогда вам нужно всего лишь установить orientation
в app.json
на "портрет" или "пейзаж" и заставить работать как на iOS, так и на Android одновременно, без необходимости редактировать конфигурацию XML для iOS/Android файлы:
"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?