Larghezza dello schermo in React Native


105

Come ottengo la larghezza dello schermo in React native?

(Ne ho bisogno perché utilizzo alcuni componenti assoluti che si sovrappongono e la loro posizione sullo schermo cambia con dispositivi diversi)

Risposte:


171

In React-Native abbiamo un'opzione chiamata Dimensions

Includi le dimensioni nella variabile superiore dove hai incluso l'immagine, il testo e altri componenti.

Quindi nei tuoi fogli di stile puoi usare come di seguito,

ex: {
width: Dimensions.get('window').width,
height: Dimensions.get('window').height
}

In questo modo puoi ottenere la finestra e l'altezza del dispositivo.


Come posso usarlo se voglio che la somma della larghezza di 2 componenti sia uguale a Dimensions.get('window').width?
— Andy95

Basta salvare questi valori a livello globale e utilizzarli ovunque non sia sicuro quando il dispositivo viene ruotato. Consiglio di utilizzare gli hook di reazione nei componenti di funzione
— MJ Studio

77

Dichiara semplicemente questo codice per ottenere la larghezza del dispositivo

let deviceWidth = Dimensions.get('window').width

Forse è ovvio, ma Dimensions è un'importazione nativa di reazione

import { Dimensions } from 'react-native'

Le dimensioni non funzioneranno senza quello


10
Grazie! Le persone in overflow dello stack tralasciano troppo spesso la provenienza delle loro importazioni. Grazie per averlo incluso, è esattamente quello di cui avevo bisogno. Non è nei documenti ufficiali.
— Jack Davidson

23

Se hai un componente Style che puoi richiedere dal tuo Component, potresti avere qualcosa del genere all'inizio del file:

const Dimensions = require('Dimensions');

const window = Dimensions.get('window');

E poi potresti fornire fulscreen: {width: window.width, height: window.height},nel tuo componente Style. Spero che questo ti aiuti


18

React Native Dimensions è solo una risposta parziale a questa domanda, sono venuto qui cercando la dimensione effettiva in pixel dello schermo e le dimensioni in realtà ti danno una dimensione del layout indipendente dalla densità.

Puoi utilizzare React Native Pixel Ratio per ottenere la dimensione effettiva dei pixel dello schermo.

È necessaria la dichiarazione di importazione sia per Dimenions che per PixelRatio

import { Dimensions, PixelRatio } from 'react-native';

Puoi usare la destrutturazione degli oggetti per creare valori globali di larghezza e altezza o inserirli in fogli di stile come altri suggeriscono, ma attenzione che non si aggiornerà al riorientamento del dispositivo.

const { width, height } = Dimensions.get('window');

Dai documenti di React Native Dimension :

Nota: sebbene le dimensioni siano immediatamente disponibili, possono cambiare (ad esempio a causa della> rotazione del dispositivo) quindi qualsiasi logica di rendering o stili che dipendono da queste costanti> dovrebbe provare a chiamare questa funzione su ogni rendering, invece di memorizzare nella cache il valore> (ad esempio , utilizzando gli stili in linea anziché impostare un valore in un foglio di stile).

PixelRatio Docs link per chi è curioso, ma non c'è molto di più.

Per ottenere effettivamente le dimensioni dello schermo utilizzare:

PixelRatio.getPixelSizeForLayoutSize(width);

o se non vuoi che larghezza e altezza siano globali puoi usarle ovunque come questo

PixelRatio.getPixelSizeForLayoutSize(Dimensions.get('window').width);

10

React Native viene fornito con l'API "Dimensions" che dobbiamo importare da "react-native"

import { Dimensions } from 'react-native';

Poi,

<Image source={pic} style={{width: Dimensions.get('window').width, height: Dimensions.get('window').height}}></Image>

9

10 aprile 2020 Risposta:

La risposta suggerita usando Dimensionsè ora scoraggiata. Vedi: https://reactnative.dev/docs/dimensions

L'approccio consigliato è usare l' useWindowDimensionshook in React; https://reactnative.dev/docs/usewindowdimensions che utilizza un'API basata su hook e aggiornerà anche il tuo valore quando il valore dello schermo cambia (ad esempio sulla rotazione dello schermo):

import {useWindowDimensions} from 'react-native';

const windowWidth = useWindowDimensions().width;
const windowHeight = useWindowDimensions().height;

Nota: useWindowDimensionsè disponibile solo da React Native 0.61.0: https://reactnative.dev/blog/2019/09/18/version-0.61


Non posso usarlo in expo-web ma funziona bene sui dispositivi mobili
— Nisharg Shah

3

Solo due semplici passaggi.

  1. import { Dimensions } from 'react-native' all'inizio del file.
  2. const { height } = Dimensions.get('window');

ora l'altezza dello schermo della finestra è memorizzata nella variabile di altezza.


1
Non sei sicuro del motivo per cui hai appena risposto con la stessa risposta? Cosa aggiunge davvero?
— Rambatino

2

Ho appena scoperto il react-native-responsive-screen repository qui . L'ho trovato molto utile.

react-native-responsive-screen è una piccola libreria che fornisce 2 semplici metodi in modo che gli sviluppatori React Native possano codificare i loro elementi dell'interfaccia utente completamente reattivi. Non sono necessarie query multimediali.

Fornisce inoltre un terzo metodo opzionale per il rilevamento dell'orientamento dello schermo e il rendering automatico in base alle nuove dimensioni.


0

Penso che l'uso react-native-responsive-dimensionspotrebbe aiutarti un po 'meglio nel tuo caso.

Puoi ancora ottenere:

larghezza del dispositivo utilizzando e responsiveScreenWidth(100)

e

device-height utilizzando e responsiveScreenHeight(100)

Puoi anche organizzare più facilmente le posizioni dei tuoi componenti assoluti impostando margini e valori di posizione proporzionandoli oltre il 100% della larghezza e dell'altezza

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.