Je dois personnaliser les onglets (changer leur couleur d'arrière-plan) à partir de la base native dans mon application native react, comme indiqué dans l'image
J'ai déjà essayé ça style={{ backgroundColor: '#C0C0C0' }}
mais j'obtiens toujours le thème par défaut.
Vous pouvez appliquer votre propre style aux onglets de base natifs comme ci-dessous.
<Tabs tabBarUnderlineStyle={{borderBottomWidth:2}}>
<Tab heading="Popular" tabStyle={{backgroundColor: 'red'}} textStyle={{color: '#fff'}} activeTabStyle={{backgroundColor: 'red'}} activeTextStyle={{color: '#fff', fontWeight: 'normal'}}>
// tab content
</Tab>
<Tab heading="Popular" tabStyle={{backgroundColor: 'red'}} textStyle={{color: '#fff'}} activeTabStyle={{backgroundColor: 'red'}} activeTextStyle={{color: '#fff', fontWeight: 'normal'}}>
// tab content
</Tab>
</Tabs>
Si vous utilisez un composant avec TabHeading
au lieu de l'en-tête string
, utilisez les accessoires tabStyle
, textStyle
sur le Tab
ou TabHeading
ne fonctionnera pas (du moins pour l'instant). Vous devrez styliser vos TabHeading
, Icon
et Text
manuellement.
Voici un exemple -
<Tabs tabBarUnderlineStyle={{borderBottomWidth:2}}>
<Tab heading={<TabHeading>
<Icon name="icon_name" />
<Text>Popular</Text>
</TabHeading>}
tabStyle={{backgroundColor: 'red'}} textStyle={{color: '#fff'}}
activeTabStyle={{backgroundColor: 'red'}} activeTextStyle={{color: '#fff', fontWeight: 'normal'}}>
// tab content
</Tab>
<Tab
heading={<TabHeading>
<Icon name="icon_name" />
<Text>Popular</Text>
</TabHeading>}
tabStyle={{backgroundColor: 'red'}} textStyle={{color: '#fff'}}
activeTabStyle={{backgroundColor: 'red'}} activeTextStyle={{color: '#fff', fontWeight: 'normal'}}>
// tab content
</Tab>
</Tabs>
Cela ne fonctionnera pas même si vous déplacez tabStyle
et d'autres accessoires vers le composant TabHeading
.
<Tabs tabBarUnderlineStyle={{borderBottomWidth:2}}>
<Tab heading={<TabHeading style={{backgroundColor: 'red'}}>
<Icon name="icon_name" style={{color: '#ffffff'}} />
<Text style={{color: '#ffffff'}}>Popular</Text>
</TabHeading>}>
// tab content
</Tab>
<Tab
heading={<TabHeading style={{backgroundColor: 'red'}}>
<Icon name="icon_name" style={{color: '#ffffff'}} />
<Text style={{color: '#ffffff'}}>Popular</Text>
</TabHeading>}>
// tab content
</Tab>
</Tabs>
<Tabs tabBarUnderlineStyle={{borderBottomWidth:2}} initialPage={this.state.currentTab} onChangeTab={({ i }) => this.setState({ currentTab: i })}>
<Tab heading={<TabHeading style={this.state.currentTab == 0 ? styles.activeTabStyle : styles.inactiveTabStyle}>
<Icon name="icon_name" style={this.state.currentTab == 0 ? styles.activeTextStyle : styles.inactiveTextStyle} />
<Text style={this.state.currentTab == 0 ? styles.activeTextStyle : styles.inactiveTextStyle}>Popular</Text>
</TabHeading>}>
// tab content
</Tab>
<Tab
heading={<TabHeading style={this.state.currentTab == 1 ? styles.activeTabStyle : styles.inactiveTabStyle}>
<Icon name="icon_name" style={this.state.currentTab == 1 ? styles.activeTextStyle : styles.inactiveTextStyle} />
<Text style={this.state.currentTab == 1 ? styles.activeTextStyle : styles.inactiveTextStyle}>Popular</Text>
</TabHeading>}>
// tab content
</Tab>
</Tabs>
J'ai essayé la solution ☝. Ça craint! (à mon avis).
Je suis donc allé avec la réponse d'origine et j'ai décidé de ne pas avoir d'icône dans ma rubrique Tab (ce qui était un meilleur prix à payer plutôt que de faire face au délai de changement d'état)
J'ai également remarqué qu'ils ont tabStyle
et d'autres props
pour TabHeading
, alors peut-être qu'ils y travaillent et que c'est juste un bug à ce moment?
Quoi qu'il en soit, je voulais juste le souligner.
Essayez:
<ScrollableTab style={{borderBottomWidth: 0, backgroundColor: 'some_color'}}
/>
o
<TabHeading style={{
backgroundColor: 'some_color',
borderBottomWidth: 0,
}}>
ou ajoutez ci-dessous prop/attribut au composant:
tabBarUnderlineStyle={{backgroundColor: '#eff2f8'}}
Notez simplement que si vous utilisez ScrollableTab dans la méthode renderTabBar du composant Tabs, les exemples ci-dessus sont des solutions partielles dans la mesure où vous devrez appliquer les styles souhaités aux composants imbriqués du composant Tabs and Tab. Donc, si vous utilisez le composant ScrollableTab, je vous suggère d'appliquer les styles directement au composant ScrollableTab. Consultez l'exemple ci-dessous:
<Tabs renderTabBar={() => <ScrollableTab style={{ backgroundColor: "your colour" }} />}>
Your Tab Content
</Tabs>
Pour plus de référence, voir ce problème github