๊ด€๋ฆฌ ๋ฉ”๋‰ด

yeon's ๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป

[React-Native] Tab | Style ์„ค์ • ๋ณธ๋ฌธ

Computer ๐Ÿ’ป/React

[React-Native] Tab | Style ์„ค์ •

yeon42 2021. 7. 31. 17:32
728x90

*

<Drawer.Navigator>๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ <Tab.Navigator>๋„ ๊ฐ ์Šคํฌ๋ฆฐ์˜ component์— ๊ฐœ๋ณ„ styling์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

  -> ๋ชจ๋‘ ๊ณตํ†ต์ ์ธ ์Šคํƒ€์ผ ์ ์šฉํ•จ

  -> <Navigator> ํƒœ๊ทธ ์•ˆ์— ์ž‘์„ฑ

  -> <Tab.Navigator>์— ์˜ต์…˜์„ ์ฃผ์ž

 

 

<Tab.Navigator
          initialRouteName="Home"
          tabBarOptions={{
            activeBackgroundColor: 'skyblue',
            activeTintColor: 'blue',
            inactiveTintColor: '#fff',
            style: {
              backgroundColor: '#c6cbef'
            }
          }}
>

  - activeBackgroundColor / activeTintColor : ์„ ํƒ๋˜์—ˆ์„ ๋•Œ ๋ฐฐ๊ฒฝ์ƒ‰๊ณผ ๊ธ€์”จ์ƒ‰

  - inactiveTintColor : ์„ ํƒ๋˜์–ด์ง€์ง€ ์•Š์€ ๊ธ€์ž์ƒ‰

 

 

 

 


 

 

  • ์Šคํฌ๋ฆฐ์„ ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•ด๋ณด์ž

- message_tab.js๋ผ๋Š” ํŒŒ์ผ ์ƒ์„ฑ

 

import TabMessageScreen from './src/message_tab';

...

<Tab.Screen name="Message" component={TabUserScreen}/>

 

 


 

 

  • ๊ฐ ํƒญ์— (text ๋Œ€์‹ ) ๊ทธ๋ฆผ์„ ์‚ฝ์ž…ํ•ด๋ณด์ž

- ๊ทธ๋ฆผ์„ ์‚ฝ์ž…ํ•จ๊ณผ ๋™์‹œ์— ์„ ํƒ๋œ ํƒญ์˜ ๊ทธ๋ฆผ์„ ์ข€ ๋” ํฌ๊ฒŒ ๋งŒ๋“œ๋Š” ํšจ๊ณผ ์ฃผ๊ธฐ

 

screenOptions={({route})=>({
            tabBarLabel: route.name,
            tabBarIcon: ({focused})=>(
              TabBarIcon(focused, route.name)
            )
          })}

  - ๋จผ์ € ์–ด๋–ค ํƒญ์ด ์„ ํƒ๋˜์—ˆ๋Š”์ง€ ์•Œ์•„์•ผ ํ•œ๋‹ค.

  - route.name : <Tab.Screen>์•ˆ์—์„œ name์— ์ •์˜๋œ string ๊ฐ’

  - focused -> Boolean๊ฐ’ : ํ„ฐ์น˜๋œ ๊ฒƒ์ธ์ง€, active ์ƒํƒœ์ธ์ง€ ํŒ๋ณ„ํ•˜๋Š” ๋ณ€์ˆ˜

 

  - ๊ทธ๋Ÿผ ์ด์ œ ์ƒ๋‹จ์— TabBarIcon ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•ด๋ณด์ž

const TabBarIcon = (focused, name) => {
  let iconImagePath;

  if (name==='Home') {
    iconImagePath = require('./src/assets/pics/home_icon.png')
  } else if (name==='User') {
    iconImagePath = require('./src/assets/pics/user.png')
  } else if (name==='Message') {
    iconImagePath = require('./src/assets/pics/message.png')
  }

  return (
    <Image
      style={{
        width: focused? 24 : 20,
        height: focused? 24 : 20,
      }}
      source = {iconImagePath}
    />
  )
}

  - ์ด๋ฏธ์ง€ ๋งํฌ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ๋Š” require()๋ฅผ ์“ด๋‹ค.

  - focused๊ฐ€ ๋˜๋ฉด ํฌ๊ธฐ๊ฐ€ ์ปค์ง€๋„๋ก ํ•จ์ˆ˜ ์ƒ์„ฑ

 

 

  - ์„ ํƒํ•˜๋ฉด ์•„์ด์ฝ˜ ํฌ๊ธฐ๊ฐ€ ๋” ์ปค์ง„๋‹ค.

 

 

labelPosition: 'beside-icon'

๊ธ€์”จ๊ฐ€ ์˜†์œผ๋กœ ๊ฐ€์žˆ๋‹ค.

  - ์›๋ž˜๋Œ€๋กœ ํ•˜๋ ค๋ฉด 'below-icon'

 

 

 

Comments