如何更改为 react-native-tab-view 的颜色?

How to change to color of react-native-tab-view?

我是 react-native 的新手,正在学习它。在学习 react-native-tab-view 时,我试图改变它的颜色,但经过几次尝试后我无法做到。如果有人指导我如何更改默认情况下为蓝色的选项卡栏的颜色,我将非常感激。 Here is the link to npm react-native-tab-view 这是一段代码。任何帮助将不胜感激。

import * as React from 'react';
import { View, StyleSheet, Dimensions } from 'react-native';
import { TabView, SceneMap } from 'react-native-tab-view';
 
const FirstRoute = () => (
  <View style={[styles.scene, { backgroundColor: '#ff4081' }]} />
);
 
const SecondRoute = () => (
  <View style={[styles.scene, { backgroundColor: '#673ab7' }]} />
);
 
const initialLayout = { width: Dimensions.get('window').width };
 
export default function TabViewExample() {
  const [index, setIndex] = React.useState(0);
  const [routes] = React.useState([
    { key: 'first', title: 'First' },
    { key: 'second', title: 'Second' },
  ]);
 
  const renderScene = SceneMap({
    first: FirstRoute,
    second: SecondRoute,
  });
 
  return (
    <TabView
      navigationState={{ index, routes }}
      renderScene={renderScene}
      onIndexChange={setIndex}
      initialLayout={initialLayout}
    />
  );
}
 
const styles = StyleSheet.create({
  scene: {
    flex: 1,
  },
});

您需要创建自定义 react-native-tab-view-custom-tabbar

此处有更多详细信息react-native-tab-view#readme

更改 tab-bar

的背景颜色

如果您参考此 section,则必须在使用 renderTabBar 属性声明自定义 React 组件后传递 tab-bar 的样式属性。

<TabView
  navigationState={{ index, routes }}
  renderScene={renderScene}
  onIndexChange={setIndex}
  initialLayout={initialLayout}
  renderTabBar={props => <TabBar {...props} style={{backgroundColor: 'black'}}/>} // <-- add this line
/>

更改 tab-bar

的文本颜色

如果你参考这个,

<TabBar
  renderLabel={({route, color}) => (
    <Text style={{ color: 'black', margin: 8 }}>
      {route.title}
    </Text>
  )}
  style={{backgroundColor: 'white'}}
  ...
/>

随时使用 example snack 进行进一步试验。 :)

这是我实现它的方法

自定义 TabBar,然后像下面的代码一样在 TabView 中使用它

首先让我们先初始化状态

   const [index, setIndex] = useState(0);
   const [routes] = useState([
     { key: 'first', title: 'Main Tab' },
     { key: 'second', title: 'Second Tab' }]);

   const renderScene = SceneMap({
     first: FeaturedStore,
     second: AllStore });
    
  

更改 labels/titles 的样式这可能对您有所帮助。 这里我使用了我的自定义 TextView 你可以使用你自己的

 const renderTabBar = props => {
    return (
      <TabBar
        {...props}
        renderLabel={({ focused, route }) => {
          return (
            <TextView
              size={20}
              category="Medium"
              color={focused ? 'BLACK' : 'GRAY3'}>
              {route.title}
            </TextView>
          );
        }}
        indicatorStyle={styles.indicatorStyle}
        style={styles.tabBar}
      />
    );
  };

这是 TabView 的示例代码

 <View style={styles.container}>
    <View style={styles.divider} />
    <TabView
      renderTabBar={renderTabBar}
      navigationState={{ index, routes }}
      renderScene={renderScene}
      onIndexChange={setIndex}
      initialLayout={{ width: SCREEN_WIDTH }}
      showPageIndicator={true}
    />
  </View>

让我们把樱桃放在蛋糕上,下面是使这个 TabView 看起来像这样的样式

 const styles = StyleSheet.create({
  container: { width: '100%', height: '100%', backgroundColor: COLORS.WHITE },
  tabBar: {
    backgroundColor: '#ffffff',
    borderBottomWidth: 1,
    borderColor: COLORS.BLACK,
  },
  indicatorStyle: {
    backgroundColor: COLORS.PRIMARY,
    padding: 1.5,
    marginBottom: -2,
  },
  divider: {
    zIndex: 100,
    position: 'absolute',
    width: 1,
    height: 48,
    backgroundColor: 'black',
    alignSelf: 'center',
  },
});

更多信息可以访问官方docs