Как получить фоновое изображение в createBottomTabNavigator?

Я пытался получить фоновое изображение для панели вкладок. Я пробовал использовать tabBarComponent, но он скрывает вкладки под ним.

Код, который я использую,

   export default MainNavigation = createBottomTabNavigator(
    {
        Profile:{
            screen: Profile,
            navigationOptions: ({ navigation }) => ({
                tabBarIcon: ({ focused, tintColor }) => {
                    return <Image source = {require('./images/tab_explore.png')} />
                }
            }),
        }
    },

    {
        tabBarComponent: props =>{
            return(
                <View style = {{backgroundColor:"black"}}> 
                <Image
                    style = {{ width:'100%', height: 80 }}
                    source = { require('./images/bottom_btn.png')} />
                </View>
            );
        }
    })

Кто-нибудь знает как решить проблему? Заранее спасибо!

Текущий выход: Как получить фоновое изображение в createBottomTabNavigator?

Он должен показать вкладки сверху оранжевого цвета.

Умерло ли Create-React-App?
Умерло ли Create-React-App?
В этом документальном фильме React.dev мы исследуем, мертв ли Create React App (CRA) и какое будущее ждет этот популярный фреймворк React.
Освоение React Native: Пошаговое руководство для начинающих
Освоение React Native: Пошаговое руководство для начинающих
React Native - это популярный фреймворк с открытым исходным кодом, используемый для разработки мобильных приложений. Он был разработан компанией...
В чем разница между react native и react ?
В чем разница между react native и react ?
React и React Native - два популярных фреймворка для создания пользовательских интерфейсов, но они предназначены для разных платформ. React - это...
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
Хуки React: что это такое и как их использовать
Хуки React: что это такое и как их использовать
Хуки React - это мощная функция библиотеки React, которая позволяет разработчикам использовать состояние и другие возможности React без написания...
1
0
3 001
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Может быть, уже слишком поздно, но я хочу, чтобы этот ответ помог многим людям. В React Navigation версии 2 это можно сделать так:

import { createBottomTabNavigator, BottomTabBar } from 'react-navigation-tabs';

Вам не нужно устанавливать вкладки response-navigation-tabs, если вы установили response-navigation. Затем создайте TabBarComponent с помощью const TabBarComponent = (props) => (<BottomTabBar {...props} />);. Вы будете использовать ключ tabBarComponent в createBottomTabNavigator. BackgroundColor: «прозрачный» для вкладок по умолчанию и VOILA!

Следующий код даст вам основную идею

export const Tabs = createBottomTabNavigator({
    Posters: { 
        screen: Posters,
        navigationOptions: {
            tabBarLabel: 'AFİŞA',
            tabBarIcon: ({tintColor}) => (
                <MaterialIcons name = "local-movies" size = {24} color = {tintColor} />
            )
        }
    },
    ComingSoon: { 
        screen: ComingSoon,
        navigationOptions: {
            tabBarLabel: 'TEZLİKLƏ',
            tabBarIcon: ({tintColor}) => (
                <MaterialIcons name = "movie" size = {24} color = {tintColor} />
            )
        }
    },
    Tickets: { 
        screen: Tickets,
        navigationOptions: {
            tabBarLabel: 'BİLETLƏR',
            tabBarIcon: ({tintColor}) => (
                <MaterialIcons name = "confirmation-number" size = {24} color = {tintColor} />
            ),

        }
    },
    More: { 
        screen: More,
        navigationOptions: {
            tabBarLabel: 'MENU',
            tabBarIcon: ({tintColor}) => (
                <MaterialIcons name = "more-horiz" size = {24} color = {tintColor} />
            ),
            tabBarOnPress: ({ navigation }) => {
                return <Text>sd</Text>
            }
        }
    },


}, 
{
    order: ['Posters', 'ComingSoon', 'Tickets', 'More' ],


    tabBarOptions: {
      activeTintColor: colors.darkYellow(),
      inactiveTintColor: 'white',
      labelStyle: {
        fontSize: 12,
        fontWeight: 'bold',
        fontFamily: defaults.fontFamily
      },
      style: styles.tabBar,
    },

    tabBarComponent: props =>{
        return(

            <React.Fragment>
                <TabBarComponent {...props} />
                <Image style = {styles.fakeTabBackground}/>
            </React.Fragment>

        )
    }
})

Хотел бы я комментировать, но у меня недостаточно репутации для этого.

<React.Fragment>
 <ImageBackground 
   source = {require('./images/bottom_btn.png')} 
   style = {{width: '100%', height: 80}}
 >
  <TabBarComponent {...props} />
 </ImageBackground>
</React.Fragment>

Это сработало для меня. Потратил почти день на выяснение этой штуки с <ImageBackground>.

С последней версией 'react-navigation-tabs' вышеуказанные решения не работают, что нам нужно сделать, мы должны явно передать следующие три свойства компоненту BottomTabBar:

 <BottomTabBar
    {...this.props}
    getButtonComponent = {this.getButtonComponent}
    getAccessibilityRole = {() => 'button'}
    getAccessibilityStates = {({focused}) => (focused ? ['selected'] : [])}
  />

Итак, полный код этого примера выглядит следующим образом:

 class TabBar extends React.Component {
  render() {
    return (
      <BottomTabBar
        {...this.props}
        getButtonComponent = {this.getButtonComponent}
        getAccessibilityRole = {() => 'button'}
        getAccessibilityStates = {({focused}) => (focused ? ['selected'] : [])}
      />
    );
  }

  getButtonComponent({route}) {
    if (route.key === 'Other') {
      return () => <View />; // a view that doesn't render its children
    } else {
      return null; // use the default nav button component
    }
  }
}

  const Tabs = createMaterialTopTabNavigator(
    {
      home: {
        screen: Home_StackNavigator,
        navigationOptions: ({navigation}) => ({
          title: 'home',
          tabBarIcon: ({tintColor}) => (
            <FontAwesome name = "home" size = {23} color = {tintColor} />
          ),
        }),
      },
      favourites: {
        screen: Favourites_StackNavigator,
        navigationOptions: ({navigation}) => ({
          title: 'favourites',
          tabBarIcon: ({tintColor}) => (
            <Ionicons name = "md-star" size = {25} color = {tintColor} />
          ),
        }),
      },
      calendar: {
        screen: Calendar_StackNavigator,
        navigationOptions: ({navigation}) => ({
          title: 'calendar',
          tabBarIcon: ({tintColor}) => (
            <Feather name = "calendar" size = {23} color = {tintColor} />
          ),
        }),
      },
      shoppingList: {
        screen: ShoppingList_StackNavigator,
        navigationOptions: ({navigation}) => ({
          title: 'shopping List',
          tabBarIcon: ({tintColor}) => (
            <Feather name = "shopping-bag" size = {23} color = {tintColor} />
          ),
        }),
      },
      profile: {
        screen: Profile_StackNavigator,
        navigationOptions: ({navigation}) => ({
          title: 'profile',
          tabBarIcon: ({tintColor}) => (
            <Feather name = "user" size = {23} color = {tintColor} />
          ),
        }),
      },
    },
    {
      tabBarPosition: 'bottom',
      swipeEnabled: false,
      animationEnabled: true,
      tabBarOptions: {
        showIcon: true,
        activeTintColor: Colors.DARK.ICON_ACTIVE,
        inactiveTintColor: Colors.DARK.ICON_INACTIVE,
        style: {
          backgroundColor: 'transparent',
        },
        labelStyle: {
          textAlign: 'center',
          fontSize: 10,
          textTransform: 'capitalize',
          color: Colors.DARK.ICON_INACTIVE,
          marginBottom: 1,
          width: 70,
        },
        indicatorStyle: {
          borderBottomColor: Colors.DARK.ICON_INACTIVE,
          borderBottomWidth: 2,
        },
      },
      tabBarComponent: (props) => {
        return (
          <React.Fragment>
            <ImageBackground
              source = {require('../../assets/images/image_bottom.jpg')}
              style = {{width: '100%', height: 60}}>
              <TabBar {...props} />
            </ImageBackground>
          </React.Fragment>
        );
      },
    },
  );

Другие вопросы по теме