Dimensionsを使って、スマホを横にしたときと縦のときのレイアウトを変える。

Dimensionsを利用するときは、

import {View, Text, Dimenstions } from 'react-native'

のように記載して利用する。

 

まず、ドキュメントを読んでみよう。

そこのサンプルコードを利用し、スマホを縦にしたときと横にしたときに

レイアウトを変更するコードを作成してみる。

例えばボタンなんかでは、縦長では縦に並べたいが、横にしたときにも縦だと、ボタンが横長になりすぎたりするので、横に並べたいことがあるかと思われる。

 

app.jsonの 'expo'の'orientation'については、下記のようにしておく

"orientation": "undefined"

 

App.js

import React, {useState, useEffect} from 'react';
import {View, StyleSheet, Text, Dimensions} from 'react-native';

const windowDimensions = Dimensions.get('window');
const screenDimensions = Dimensions.get('screen');
const windowWidth = Dimensions.get('window').width;
const windowHeight = Dimensions.get('window').height;

const App = () => {
  const [dimensions, setDimensions] = useState({
    window: windowDimensions,
    screen: screenDimensions,
  });

  const [windowSize, setWindowSize] = useState({
    height: windowHeight,
    width: windowWidth,
  })

  useEffect*1}
      <Text style={styles.header}>Screen Dimensions</Text>
      {Object.entries(dimensions.screen).map*2}
     </View>
    </View>
  );
};

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
  },
  containerPortrait: {
    flex:1,
    flexDirection: 'column',
    justifyContent: 'center',
    alignItems: 'center'
  },
  containerLandscape: {
    flex:1,
    flexDirection: 'row',
    justifyContent: 'center',
    alignItems:'center'
  },
  header: {
    fontSize: 16,
    marginVertical: 10,
  },
});

export default App;
WordPressページへ移行中 https://yuuzaki2022.com/

*1:) => {

    const subscription = Dimensions.addEventListener(
      'change',
      ({window, screen, height, width}) => {
        setDimensions({window, screen});
        setWindowSize({height, width});
      },
    );
   
    return () => subscription?.remove();
  });

  return (
    <View style={styles.container}>
     <View style={ windowSize.height> windowSize.width ? styles.containerPortrait : styles.containerLandscape}>
      <Text style={styles.header}>Window Dimensions</Text>
      {Object.entries(dimensions.window).map(([key, value]) => (
        <Text>
          {key} - {value}
        </Text>
     

*2:[key, value]) => (

        <Text>
          {key} - {value}
        </Text>