Я новачок в середовищі 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
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 генерує файл під назвою AndroidManifest.xml у каталозі вашого проекту в папці Android. До цього файлу 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"
На додаток до рішень , розміщені вище , якщо ви використовуєте Expo , щоб побудувати ваш додаток (як в даний час рекомендується в офіційних інструкціях по Реагувати Native блог ) , то все , що вам потрібно , це задати 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?
Ви можете просто застосувати логіку, додавши зворотний виклик життєвого циклу до 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>
Якщо це не спрацьовує, ви можете скористатися реакцією-рідною орієнтацією