How to create a React native theme?
Create theme.js file
export default {
color: {
yellow: '#F2BC00',
orange: '#F2622E',
white: '#FFFFFF',
black: '#000000'
},
buttonSize: 44,
spacing: {
container: 16,
content: 12
},
headerHeight: 50,
font: {
main: 'Roboto',
alternative: 'Circular Std',
bodyWeight: 300,
size: 14
},
};
export default {
color: {
yellow: '#F2BC00',
orange: '#F2622E',
white: '#FFFFFF',
black: '#000000'
},
buttonSize: 44,
spacing: {
container: 16,
content: 12
},
headerHeight: 50,
font: {
main: 'Roboto',
alternative: 'Circular Std',
bodyWeight: 300,
size: 14
},
};
export default { color: { yellow: '#F2BC00', orange: '#F2622E', white: '#FFFFFF', black: '#000000' }, buttonSize: 44, spacing: { container: 16, content: 12 }, headerHeight: 50, font: { main: 'Roboto', alternative: 'Circular Std', bodyWeight: 300, size: 14 }, };
Wrap theme content by styled-components
import theme from 'src/config/theme';
...
<ThemeProvider theme={theme}>
{children}
</ThemeProvider>
import theme from 'src/config/theme';
...
<ThemeProvider theme={theme}>
{children}
</ThemeProvider>
import theme from 'src/config/theme'; ... <ThemeProvider theme={theme}> {children} </ThemeProvider>
Usage
import { Container } from 'native-base';
...
const StyledContainer = styled(Container)`
padding: 40px ${(props) => props.theme.spacing.container}px;
`;
const LoginScreen = () => {
const onLogin = () => {};
return (
<StyledContainer>
<Input
placeholder="username"
leftIcon={{ type: 'ionicon', name: 'md-person' }}
/>
<Input
placeholder="password"
secureTextEntry={true}
leftIcon={{ type: 'ionicon', name: 'lock-open' }}
/>
<Button title="Login" onPress={() => onLogin()} />
</StyledContainer>
);
};
export default LoginScreen;
import { Container } from 'native-base';
...
const StyledContainer = styled(Container)`
padding: 40px ${(props) => props.theme.spacing.container}px;
`;
const LoginScreen = () => {
const onLogin = () => {};
return (
<StyledContainer>
<Input
placeholder="username"
leftIcon={{ type: 'ionicon', name: 'md-person' }}
/>
<Input
placeholder="password"
secureTextEntry={true}
leftIcon={{ type: 'ionicon', name: 'lock-open' }}
/>
<Button title="Login" onPress={() => onLogin()} />
</StyledContainer>
);
};
export default LoginScreen;
import { Container } from 'native-base'; ... const StyledContainer = styled(Container)` padding: 40px ${(props) => props.theme.spacing.container}px; `; const LoginScreen = () => { const onLogin = () => {}; return ( <StyledContainer> <Input placeholder="username" leftIcon={{ type: 'ionicon', name: 'md-person' }} /> <Input placeholder="password" secureTextEntry={true} leftIcon={{ type: 'ionicon', name: 'lock-open' }} /> <Button title="Login" onPress={() => onLogin()} /> </StyledContainer> ); }; export default LoginScreen;
A global Toast with callback Button
native-base
How to use Toast?
Wrap <Root> component
import {Root} from 'native-base';
...
return (
<Root>
<NavigationContainer>
...
</NavigationContainer>
</Root>
)
import {Root} from 'native-base';
...
return (
<Root>
<NavigationContainer>
...
</NavigationContainer>
</Root>
)
import {Root} from 'native-base'; ... return ( <Root> <NavigationContainer> ... </NavigationContainer> </Root> )
Then, you can use it anywhere in your project
Toast.show({
text: 'Wrong password!',
buttonText: 'OK',
buttonTextStyle: {color: '#000'},
buttonStyle: {backgroundColor: '#fff'},
duration: 0,
onClose: () => {},
});
Toast.show({
text: 'Wrong password!',
buttonText: 'OK',
buttonTextStyle: {color: '#000'},
buttonStyle: {backgroundColor: '#fff'},
duration: 0,
onClose: () => {},
});
Toast.show({ text: 'Wrong password!', buttonText: 'OK', buttonTextStyle: {color: '#000'}, buttonStyle: {backgroundColor: '#fff'}, duration: 0, onClose: () => {}, });
Issue with Toast: When Toast is displayed, tap on an Input field > Keyboard is shown up with Toast > Button can’t be tapped until you edit Input field and tap the button again
How to use Toast with button & callback?
No solution
How to use icon vector?
react-native-elements
import { Icon } from 'react-native-elements';
...
<Icon name="chevron-down" type="ionicon" size={25} color={'gray'} />
import { Icon } from 'react-native-elements';
...
<Icon name="chevron-down" type="ionicon" size={25} color={'gray'} />
import { Icon } from 'react-native-elements'; ... <Icon name="chevron-down" type="ionicon" size={25} color={'gray'} />
native-base
import {Button, Icon} from 'native-base';
...
<Icon
style={{
fontSize: 15,
color: 'red',
marginLeft: -25,
marginTop: -18,
}}
type="FontAwesome"
name="circle"
/>
import {Button, Icon} from 'native-base';
...
<Icon
style={{
fontSize: 15,
color: 'red',
marginLeft: -25,
marginTop: -18,
}}
type="FontAwesome"
name="circle"
/>
import {Button, Icon} from 'native-base'; ... <Icon style={{ fontSize: 15, color: 'red', marginLeft: -25, marginTop: -18, }} type="FontAwesome" name="circle" />
A dropdown menu displayed from a float icon
react-native-paper
How to create drop down menu?
How to customize menu item?
No solution
A button with shadow
CSS
box-shadow: 5px 5px 12px rgba(0, 0, 0, 0.06);
&:hover {
background-color: #dadada;
border-color: #d8d8d8;
}
box-shadow: 5px 5px 12px rgba(0, 0, 0, 0.06);
&:hover {
background-color: #dadada;
border-color: #d8d8d8;
}
box-shadow: 5px 5px 12px rgba(0, 0, 0, 0.06); &:hover { background-color: #dadada; border-color: #d8d8d8; }
React Native
// iOS
shadowColor: 'rgba(0, 0, 0, 0.4)',
shadowOffset: {
width: 3,
height: 3
},
shadowRadius: 1,
shadowOpacity: 0.4
// Android
elevation: 4
// iOS
shadowColor: 'rgba(0, 0, 0, 0.4)',
shadowOffset: {
width: 3,
height: 3
},
shadowRadius: 1,
shadowOpacity: 0.4
// Android
elevation: 4
// iOS shadowColor: 'rgba(0, 0, 0, 0.4)', shadowOffset: { width: 3, height: 3 }, shadowRadius: 1, shadowOpacity: 0.4 // Android elevation: 4
style-components
// iOS, react-native-web
shadow-color: rgba(0, 0, 0, 0.4);
shadow-opacity: 0.4;
shadow-radius: 1;
shadow-offset: 3px 3px;
// Android
elevation: 4
// iOS, react-native-web
shadow-color: rgba(0, 0, 0, 0.4);
shadow-opacity: 0.4;
shadow-radius: 1;
shadow-offset: 3px 3px;
// Android
elevation: 4
// iOS, react-native-web shadow-color: rgba(0, 0, 0, 0.4); shadow-opacity: 0.4; shadow-radius: 1; shadow-offset: 3px 3px; // Android elevation: 4
Shadow in Android
Border
React Native
borderBottomLeftRadius: number
borderBottomRightRadius: number
borderTopLeftRadius: number
borderTopRightRadius: number
borderBottomLeftRadius: number
borderBottomRightRadius: number
borderTopLeftRadius: number
borderTopRightRadius: number
borderBottomLeftRadius: number borderBottomRightRadius: number borderTopLeftRadius: number borderTopRightRadius: number
style-components
border-bottom-left-radius: number
border-bottom-right-radius: number
border-top-left-radius: number
border-top-right-radius: number
border-bottom-left-radius: number
border-bottom-right-radius: number
border-top-left-radius: number
border-top-right-radius: number
border-bottom-left-radius: number border-bottom-right-radius: number border-top-left-radius: number border-top-right-radius: number
Position: “absolute” or “fixed”
css
- absolute: Element is fixed in a position inside parent element
- fixed: Element is fixed in a position inside the screen
Ref: css-to-react-native
Text decoration
- fontSize, fontWeight
- lineHeight
- textAlign
Leave a Reply