react_native Image/ImageBackground/KeyboardAvoidingView
리액트 네이티브의 이미지 컴포넌트(Image , ImageBackground) 와
포커스되어 있으면 KeyboardAvoidingView가 자동으로 스크롤 되도록 하는 것을 학습한다.
1. Image
import React from 'react';
import { View, Image, StyleSheet } from 'react-native';
const styles = StyleSheet.create({
container: {
paddingTop: 50,
},
tinyLogo: {
width: 50,
height: 50,
},
logo: {
width: 100,
height: 200,
},
});
const DisplayAnImage = () => {
return (
<View style={styles.container}>
<Image
style={styles.tinyLogo}
source={require('.//download.jpg')}
/>
<Image
style={styles.tinyLogo}
source={{
uri: 'https://w.namu.la/s/41015efa2255d765a9f4e348cd728257014f5036c7c163f5cac81331d4170fd50c187ad77018c0edc6a91654540cad58c347b8f3909c3ff00add93088d029b89dc4a4451254b284c13b20462ec7626bb9c9c1268f9ef95c0d62d8ee6a2eb4162',
}}
/>
<Image
style={styles.logo}
source={{
uri: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAAzCAYAAAA6oTAqAAAAEXRFWHRTb2Z0d2FyZQBwbmdjcnVzaEB1SfMAAABQSURBVGje7dSxCQBACARB+2/ab8BEeQNhFi6WSYzYLYudDQYGBgYGBgYGBgYGBgYGBgZmcvDqYGBgmhivGQYGBgYGBgYGBgYGBgYGBgbmQw+P/eMrC5UTVAAAAABJRU5ErkJggg==',
}}
/>
</View>
);
}
export default DisplayAnImage;
source 에는 uri 주소를 넣어 이미지를 불러온다.
source={{uri : '주소' }} 형태 이다.
{} 는 jsx에서는 자바스크립트 객체를 사용할 때 사용하는 문법이다.
require 는 내부 경로에서 이미지를 가져온다. 하지만 프로젝트의 내부에 있어야 한다.
기존에 이미지보다 Image 컴포넌트에 적용된 이미지는 더 확대되어 나오는 것을 확인 할수있다.
컴포넌트 크기에 맞게 이미지를 조절하려면 resizeMode 를 사용합니다.
resizeMode:'cover'
: 이미지의 크기가 뷰의 해당 크기보다 크거나 같도록 이미지의 크기를 균일하게 조정한다.
부모 컴포넌트 크기를 꽉 채워야 할 때 사용됩니다.
(이미지의 가로 세로 비율 유지)
resizeMode:'contain'
: 이미지의 크기가 뷰의 해당 크기와 같거나 작아지도록 이미지의 크기를 균일하게 조정한다.
본 이미지의 전체를 보여줘야 할 때 사용됩니다.
(이미지의 가로 세로 비율 유지)
resizeMode:'center'
두 차원을 따라 뷰의 중앙에 이미지를 배치합니다.
이미지가 뷰보다 크면 뷰에 포함되도록 균일하게 축소합니다.
2. ImageBackground
이미지를 백그라운드 이미지로 넣는 컴포넌트 입니다.
( TMI : js 같은 경우는 스타일에서 background-image: url(...); 을 넣으면 백그라운드 이미지가 들어간다. )
import React from "react";
import { ImageBackground, Image, StyleSheet, Text, View } from "react-native";
const image = { uri: "https://reactjs.org/logo-og.png" };
const App = () => (
<View style={styles.container}>
<ImageBackground source={image} style={styles.image}>
<Image
style={styles.cover}
source={require('./download.jpg')}
/>
<Text style={styles.text}>Inside</Text>
</ImageBackground>
</View>
);
const styles = StyleSheet.create({
container: {
flex: 1,
flexDirection: "column"
},
image: {
flex: 1,
resizeMode: "cover",
justifyContent: "center"
},
text: {
color: "white",
fontSize: 42,
fontWeight: "bold",
textAlign: "center",
backgroundColor: "#000000a0"
}
});
export default App;
백그라운드 이미지안에 이미지를 또 넣어서 이미지를 띄울수도 있다.
<ImageBackground> 는 style을 사용해줘야 에러가 발생하지 않는다.
컴포넌트를 구분하기에 사용하기도 하며 <Image> 그 위에 하위 요소를 추가 할 수있다.
3. KeyboardAvoidingView
입력하는 곳에 입력을 하려고하면 키보드가 올라왔을 때 뷰를 가려져버린다.
하지만 ScrollView 내에서는 작동하지 않는다.
이 때 사용하는 것이 KeyboardAwareScrollView 이다.
KeyboardAwareScrollView 로 감싸고 사용하면 된다.
Props
- behavior
키보드 존재에 반응하는 방법을 지정한다.
3가지 option 이 있다.
height : 입력창이 키보드로부터 keyboardVerticalOffset 만큼 벌어진다.
position : 입력창이 현재 위치한만큼 키보드로부터 위치하게 된다.
padding : 키보드로부터 keyboardVerticalOffset 만큼 padding을 만든다.
- keyboardVerticalOffset
사용자 화면 상단와 입력창의 반응을 볼 수 있다.
기본값은 0 이다.
위에 코드에서는
behavior={Platform.OS === "ios" ? "padding" : "height"}
스마트폰 OS 가 ios 일때는 padding 안드로이드 라면 height 로 설정하였다.
IOS 는 키보드를 내릴때 입력 칸이 아닌 다른곳을 누르는 경우 텍스트 입력이 취소된다.
Android에서는 Back키를 통해서도 키보드를 내릴 수 있다.
3줄 요약
1) Image는 사진을 가져오는데 source 를 통해 uri 를 불러올수도 있고 require(내부경로) 에서도 가져올 수 있다.
2) imageBackground 는 백그라운드 이미지를 불러오는데 styles가 필수이다.
3) KeyboardAvoidingView 는 키보드가 뷰를 가리는 현상을 해결하기위한 구성 요소인데
인자값으로 height , padding, position 이 있다.