Ancho de pantalla en React Native

105

¿Cómo obtengo el ancho de la pantalla en React native?

(Lo necesito porque utilizo algunos componentes absolutos que se superponen y su posición en la pantalla cambia con diferentes dispositivos)

Zygro
fuente

Respuestas:

171

En React-Native tenemos una opción llamada Dimensiones

Incluya Dimensiones en la var superior donde ha incluido la Imagen, el Texto y otros componentes.

Luego, en sus hojas de estilo, puede usar lo siguiente,

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

De esta manera puede obtener la ventana y la altura del dispositivo.

Pramod Mg
fuente
¿Cómo puedo usar esto si quiero hacer que la suma del ancho de 2 componentes sea igual al Dimensions.get('window').width?
Andy95
Simplemente guarde estos valores globalmente y utilícelos en cualquier lugar que no sea seguro cuando se gira su dispositivo. Recomiendo usar react hooks en componentes de función
MJ Studio
77

Simplemente declare este código para obtener el ancho del dispositivo

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

Tal vez sea obvio, pero Dimensions es una importación nativa de reacción

import { Dimensions } from 'react-native'

Las dimensiones no funcionarán sin eso

Aneesh PV
fuente
10
¡Gracias! Las personas con desbordamiento de pila omiten de dónde provienen sus importaciones con demasiada frecuencia. Gracias por incluirlo, eso es exactamente lo que necesitaba. No está en los documentos oficiales.
Jack Davidson
23

Si tiene un componente de estilo que puede requerir de su componente, entonces podría tener algo como esto en la parte superior del archivo:

const Dimensions = require('Dimensions');

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

Y luego podría proporcionar fulscreen: {width: window.width, height: window.height},en su componente Estilo. Espero que esto ayude

Tom Hanson
fuente
18

React Native Dimensions es solo una respuesta parcial a esta pregunta, vine aquí buscando el tamaño de píxel real de la pantalla, y las dimensiones en realidad le brindan un tamaño de diseño independiente de la densidad.

Puede usar React Native Pixel Ratio para obtener el tamaño de píxel real de la pantalla.

Necesita la declaración de importación para Dimenions y PixelRatio

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

Puede usar la desestructuración de objetos para crear globales de ancho y alto o ponerlo en hojas de estilo como sugieren otros, pero tenga en cuenta que esto no se actualizará en la reorientación del dispositivo.

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

De React Native Dimension Docs:

Nota: Aunque las dimensiones están disponibles de inmediato, pueden cambiar (por ejemplo, debido a la> rotación del dispositivo), por lo que cualquier lógica o estilo de representación que dependa de estas constantes> debería intentar llamar a esta función en cada representación, en lugar de almacenar en caché el valor> (por ejemplo , usando estilos en línea en lugar de establecer un valor en una StyleSheet).

Enlace de PixelRatio Docs para aquellos que tienen curiosidad, pero no hay mucho más.

Para obtener realmente el uso del tamaño de la pantalla:

PixelRatio.getPixelSizeForLayoutSize(width);

o si no desea que el ancho y la altura sean globales, puede usarlo en cualquier lugar como este

PixelRatio.getPixelSizeForLayoutSize(Dimensions.get('window').width);
NJensen
fuente
10

React Native viene con la api "Dimensions" que necesitamos importar desde 'react-native'

import { Dimensions } from 'react-native';

Luego,

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

Respuesta del 10 de abril de 2020:

DimensionsAhora se desaconseja el uso de la respuesta sugerida . Ver: https://reactnative.dev/docs/dimensions

El enfoque recomendado es usar el useWindowDimensionsgancho en React; https://reactnative.dev/docs/usewindowdimensions que usa una API basada en hook y también actualizará su valor cuando cambie el valor de la pantalla (en la rotación de la pantalla, por ejemplo):

import {useWindowDimensions} from 'react-native';

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

Nota: useWindowDimensionssolo está disponible en React Native 0.61.0: https://reactnative.dev/blog/2019/09/18/version-0.61

micnguyen
fuente
3

Solo dos sencillos pasos.

  1. import { Dimensions } from 'react-native' en la parte superior de su archivo.
  2. const { height } = Dimensions.get('window');

ahora la altura de la pantalla de la ventana se almacena en la variable de altura.

Dhruvil Shah
fuente
1
¿No estás seguro de por qué acabas de responder con la misma respuesta? ¿Qué agrega esto realmente?
Rambatino
2

Acabo de descubrir el react-native-responsive-screen repositorio aquí . Lo encontré muy útil.

react-native-responsive-screen es una pequeña biblioteca que proporciona 2 métodos simples para que los desarrolladores de React Native puedan codificar sus elementos de interfaz de usuario con total capacidad de respuesta. No se necesitan consultas de medios.

También proporciona un tercer método opcional para la detección de la orientación de la pantalla y la reproducción automática de acuerdo con las nuevas dimensiones.

jfunk
fuente
0

Creo que usarlo react-native-responsive-dimensionspodría ayudarte un poco mejor en tu caso.

Todavía puede obtener:

ancho del dispositivo usando y responsiveScreenWidth(100)

y

altura del dispositivo usando y responsiveScreenHeight(100)

También puede organizar más fácilmente las ubicaciones de sus componentes absolutos estableciendo márgenes y valores de posición proporcionándolos sobre el 100% del ancho y alto.

picacode
fuente