Aggiornamento 2017: {"orientation": "portrait"}
Attualmente molte guide ufficiali di React Native come questa consigliano di utilizzare Expo durante la creazione di app React Native, quindi oltre alle risposte esistenti aggiungerò anche una soluzione specifica per Expo che vale la pena notare perché funziona sia per iOS che per Android e devi solo impostalo una volta senza dover modificare XCode config, AndroidManifest.xml ecc.
Impostazione dell'orientamento in fase di costruzione:
Se stai creando le tue app React Native con Expo, puoi utilizzare il orientationcampo nel tuo app.jsonfile, ad esempio:
{
"expo": {
"name": "My app",
"slug": "my-app",
"sdkVersion": "21.0.0",
"privacy": "public",
"orientation": "portrait"
}
}
Può essere impostata "portrait", "landscape"o "default"che significa AutoRotate senza serratura orientamento.
Impostazione dell'orientamento in fase di esecuzione:
Puoi anche sovrascrivere tale impostazione in fase di esecuzione eseguendo, ad esempio:
Expo.ScreenOrientation.allow(Expo.ScreenOrientation.Orientation.LANDSCAPE);
dove l'argomento può essere:
ALL - Tutti e 4 gli orientamenti possibili
ALL_BUT_UPSIDE_DOWN - Tutti tranne il ritratto inverso, potrebbero essere tutti e 4 gli orientamenti su alcuni dispositivi Android.
PORTRAIT - Orientamento verticale, potrebbe anche essere ritratto inverso su alcuni dispositivi Android.
PORTRAIT_UP - Solo ritratto in alto.
PORTRAIT_DOWN - Solo ritratto capovolto.
LANDSCAPE - Qualsiasi orientamento orizzontale.
LANDSCAPE_LEFT - Solo paesaggio sinistro.
LANDSCAPE_RIGHT - Solo paesaggio destro.
Rilevamento della rotazione:
Quando consenti più di un orientamento, puoi rilevare i cambiamenti ascoltando gli changeeventi Dimensionssull'oggetto:
Dimensions.addEventListener('change', (dimensions) => {
// you get:
// dimensions.window.width
// dimensions.window.height
// dimensions.screen.width
// dimensions.screen.height
});
oppure puoi anche ottenere le dimensioni in qualsiasi momento Dimensions.get('window')e in Dimensions.get('screen')questo modo:
const dim = Dimensions.get('window');
// you get:
// dim.width
// dim.height
o:
const dim = Dimensions.get('screen');
// you get:
// dim.width
// dim.height
Quando ascolti l'evento ottieni entrambi windowe screenallo stesso tempo, ecco perché accedi in modo diverso.
Documentazione:
Per maggiori informazioni vedere: