Рубрики
Без рубрики

Различные макеты в портретной и ландшафтной ориентации

Мотивация Я никогда не работал в проекте, где приложение должно иметь два разных макета … Помечено JavaScript, Reactanation, React, Mobile.

Мотивация

Я никогда не работал в проекте, где приложение должно иметь два разных макета: один для портретной ориентации и другой для ландшафтной позиции. Таким образом, только из-за любопытства я решил создать простой проект с этой функциональностью.

Проект

Проект состоит из экрана входа в систему, где, когда приложение находится в портретной ориентации, он будет иметь этот макет:

Когда приложение находится в ландшафтной ориентации, он будет иметь этот макет:

Давайте код

import  React,{useState, useEffect} from 'react';
import { Text, View, StyleSheet, TextInput, Image, KeyboardAvoidingView, ScrollView, SafeAreaView, Dimensions } from 'react-native';
import Constants from 'expo-constants';
import AssetExample from './components/AssetExample'


export default function App() {
  const [isVerticalOrientation, setIsVerticalOrientation] = useState(true)
  const [firstInputText, setFirstInputText] = useState('Orientation')
  const [secondInputText, setSecondInputText] = useState('Width')
  const [thirdInputText, setThirdInputText] = useState('Height')

  const checkIfDeviceIsInVerticalOrHorizontalOrientation = () =>{
  const screenWidth = Dimensions.get('window').width
  const screenHeight = Dimensions.get('window').height
    if(screenWidth > screenHeight){
        setIsVerticalOrientation(false)
    }else{
        setIsVerticalOrientation(true)
    }
  }

  return (
    checkIfDeviceIsInVerticalOrHorizontalOrientation()} style={!isVerticalOrientation ?  styles.containerRow : styles.container}>
       
       
         setFirstInputText(text)}/>
        
        
    
    
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    paddingTop: Constants.statusBarHeight,
    backgroundColor: '#ACACAC',
    justifyContent: 'center',
    alignItems: 'center',
    padding: 8,
  },
   containerRow: {
    flex:1,
    flexDirection: 'row',
    paddingTop: Constants.statusBarHeight,
    backgroundColor: '#ACACAC',
    justifyContent: 'center',
    alignItems: 'center',
    padding: 8,
  },
  inputStyle: {
    borderWidth: 1,
    borderColor: 'white',
    width: 200,
    height:50,
    borderRadius: 50,
    paddingLeft:10,
    marginTop:10,
  },
});

Я проверяю Onlayout основного контейнера, используя метод «CheckificeSICISINVENTICALORHORIZONTALORIENTALICY» Если ширина экрана больше, чем его высота, если она есть, устройство находится в ландшафтной ориентации, если он не является, устройство находится в портретном положении. В каждом состоянии я устанавливаю состояние под названием «IsverticalIretionation», что в зависимости от его значения компоновка изменяется на стиль с именем «контейнер» или «контейнер». Эти стили являются основными, поскольку они диктуют, следует ли вести себя как ландшафт или портрет.

Полный код приложения: https://github.com/gabriielsideProjects/awesome-device-orientation Я открыт, чтобы потянуть запрос и предложения. Сделайте себя комфортно 😃. Я использовал Закуски создать приложение. Если вы хотите, вы можете проверить мою закуски И запустить его, чтобы увидеть это работает 🔳. Давайте выпьем уютный и теплый кофе, говорите привет мне на Социальная сеть вы желаете 😃☕.

Оригинал: “https://dev.to/gabrielsideprojects/different-layouts-in-portrait-and-landscape-orientations-492l”