在 TabBar 渲染的容器内渲染出一个标签项。
<TabBar>
{[
<TabBar.item
key={0}
title='hello'
icon={{uri: require('QImageSet').loading}}
titleStyle={{fontSize: 14}}
iconStyle={{fontSize: 22}}
selected
>
<View style={{
flexGrow: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: 'red',
}}>
<Text style={{ color: '#fff' }}>Wifi</Text>
</View>
</TabBar.item>
]}
</TabBar>
注意:即使只有一个标签,所有标签项也需要通过由 TabBar.Item 组成的数组项列举出来。
分别在 titleStyle、 iconStyle 和 badgeStyle 属性中设置标签的标题样式、图标样式和图标右上角红色的气泡样式。不过,当前被选中的标签图标的颜色需要在 TabBar 组件的 tintColor 属性中设置。
另外,可以通过给 icon 属性传入一个图片地址或者给renderIcon 属性传入一个返回JSX形式图标的函数的方式自定义标签项的图标。
class TabBarExample extends React.Component {
constructor(props){
super(props);
this.state = {
selectedTab: 'wifi',
badgeVisible: true,
};
}
renderIcon(tab) {
const iconfonts = {
wifi: '\uf04b',
find: '\uf067',
money: '\uf238',
};
return (<Text style={{fontFamily: 'qunar_react_native', fontSize: 22}}>{iconfonts[tab]}</Text>);
}
render() {
const tabs = ['wifi', 'find', 'money'];
return (
<TabBar
tintColor='red'
>
{tabs.map((tab, i) =>
<TabBar.item
key={i}
title={tab}
badge={tab === 'find' && this.state.badgeVisible ? '1' : undefined}
selected={this.state.selectedTab === tab}
onPress = {() => this.onTabPress(tab)}
renderIcon={() => this.renderIcon(tab)}
titleStyle={{fontSize: 14}}
iconStyle={{fontSize: 22}}
>
{this.renderPageContent(tab)}
</TabBar.item>
)}
</TabBar>
)
}
renderPageContent(pageText) {
return (
<View style={styles.pageContainer}>
<View style={[styles.pageContent, {backgroundColor: getRandomColor()}]}>
<Text style={styles.pageContentText}>当前页面: {pageText}</Text>
</View>
</View>
)
function getRandomColor() {
var letters = '3456789ABC'.split('');
var color = '#';
for (var i = 0; i < 6; i++ ) {
color += letters[Math.floor(Math.random() * 10)];
}
return color;
}
}
onTabPress(tab){
if(tab === 'find'){
this.state.badgeVisible = false
}
this.setState({
selectedTab: tab,
badgeVisible: this.state.badgeVisible
})
}
}
const styles = StyleSheet.create({
tabBar: {
flex: 1,
borderTopWidth: 1,
borderColor: '#ccc',
backgroundColor: '#ddd'
},
pageContainer: {
flex: 1,
},
pageContent: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
},
pageContentText: {
fontSize: 20,
color: '#fff'
},
});
在图标右上角显示一个红色的气泡。
在图标右上角气泡样式。
给当前标签指定一个自定义的图标。
() => renderable
自己渲染一个icon,而不用默认图片icon,配置此函数时props.icon不生效。
当此标签被选中时调用。你应该修改组件的状态来使得selected={true}。
这个属性决定了子视图是否可见,如果你看到一个空白的页面,很可能是没有选中任何一个标签。
此标签元素样式。
标签icon样式。
标签标题样式。
在图标下面显示的标题文字。