Trabalhando com diferentes Layouts para orientação 초상화 및 풍경
13192 단어 reactmobilereactnativejavascript
동기
Eu nunca tinha trabalhado em um projeto em que o app deveria ter dois diferentes layouts: Um para a orientação portrait e outro para orientação landscape. Então, por curiosidade, decidir criar um projeto com essa funcionalidade.
프로젝트
O 앱 구성 em uma tela que quando está na orientação portrait, ele terá o seguinte 레이아웃:
Quando o app estiver na orientação landscape, o mesmo terá o seguinte layout:
바모스 코다르
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 (
<View onLayout={()=>checkIfDeviceIsInVerticalOrHorizontalOrientation()} style={!isVerticalOrientation ? styles.containerRow : styles.container}>
<AssetExample/>
<View>
<TextInput value={firstInputText} style= {styles.inputStyle} onChangeText={(text)=> setFirstInputText(text)}/>
<TextInput style={styles.inputStyle} value={secondInputText}/>
<TextInput style={styles.inputStyle} value={thirdInputText}/>
</View>
</View>
);
}
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,
},
});
Eu verifico no método onLayout 컨테이너 주체, "checkIfDeviceIsInVerticalOrHorizontalOrientation"방법을 사용하여 largura da tela é maior que a sua altura, se for, o dispositivo está na orientação landscape, se não for, o dispositivo está na orientação portrait .
조건은 "isVerticalOrientation"에 대한 부울 값이며 "container"또는 "containerRow"에 대한 레이아웃입니다. Esses dois estilos são os os principais, pois ditam se o layout deve se comportar como landscape ou portrait.
Código completeto do 앱: https://github.com/gabrielsideprojects/awesome-device-orientation
Estou aberto a pull requests e sugestões. Sintam-se confortáveis 😃.
유유세이 Snack para criar esse 앱. Se você desejar, você mesmo pode rodar meu snack para vê tudo descrito neste artigo funcionando 🔳.
Vamos beber um cafe, manda um "oi, dev"na rede social que você desejar 😃☕.
Reference
이 문제에 관하여(Trabalhando com diferentes Layouts para orientação 초상화 및 풍경), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/gabrielsideprojects/trabalhando-com-diferentes-layouts-para-orientacao-portrait-e-landscape-524h텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)