React Native — родной базовый нижний колонтитул не меняет цвет

Вот код:

 // Bottom.js
<StyleProvider style={getTheme(commonColor)}>
    <Footer>
        <FooterTab>
            <Button active>
                <Icon active name="food" size={24}  />
                <Text active>Lunch Box</Text>
            </Button>
            <Button>
                <Icon name="coins" size={24} />
                <Text>Point</Text>
            </Button>
            <Button>
                <Icon name="face" size={24} />
                <Text>Profile</Text>
            </Button>
        </FooterTab>
    </Footer>

</StyleProvider>

// commonColor.js

// Footer
footerHeight: 55,
footerDefaultBg: '#ffffff',

// FooterTab
tabBarTextColor: '#FFF',
tabBarTextSize: platform === 'ios' ? 14 : 16,
activeTab: platform === 'ios' ? '#007aff' : '#fff',
sTabBarActiveTextColor: '#007aff',
tabBarActiveTextColor: '#fff',
tabActiveBgColor: platform === 'ios' ? '#1569f4' : '#1569f4',

вот результат: Результат

Я пытался редактировать FooterTab.js напрямую, но ничего не изменилось.

Единственные изменения, которые могут произойти при рендеринге, это tabActiveBgColor: platform === 'ios' ? '#1569f4' : '#1569f4'. И я даже не знаю, почему работает только этот код, я даже active на FooterTab не ставил.

Я ожидал, что когда я активирую кнопку, и текст станет белым.

Любое решение?


person ssuhat    schedule 04.05.2017    source источник
comment
Какая у вас версия React Native и NativeBase?   -  person Supriya Kalghatgi    schedule 25.05.2017


Ответы (5)


Я решил эту проблему для добавления стиля в FooterTab. Вам не нужно делать какие-либо стили в собственном базовом компоненте Footer. Вот мой исходный код:

     <Footer>
          <FooterTab style={{backgroundColor:"#FFF"}}>
              <Button style={{paddingLeft:0, paddingRight:0}}>
                  <Text}}>iFeeds</Text>
              </Button>
              <Button style={{paddingLeft:0, paddingRight:0}}>
                  <Text}}>iFeeds</Text>
              </Button>
          </FooterTab>
    <Footer>

Мой результат

person Hermenpreet Singh    schedule 18.01.2018
comment
@NijatAliyev Пожалуйста, поделитесь своими мыслями и правильным решением для ответа выше. - person Hermenpreet Singh; 16.07.2020

1) Запустите эту команду из своего терминала после установки нативной базы.

node node_modules/native-base/ejectTheme.js

Когда вы запускаете указанную выше команду, папка с именем native-base-theme копируется в корень вашего проекта. Внутри каталога находятся две папки с именами компонентов и переменных.

2) Оберните код или компонент, к которому вы хотите применить тему, с помощью StyleProvider.

например домашний экран

import React, { Component } from 'react';
import { Container, Content, Text, StyleProvider } from 'native-base';
import getTheme from './native-base-theme/components';
import material from './native-base-theme/variables/material';
import CustomFooter from '../components/CustomFooter';
​export default class HomeScreen extends Component {
  constructor(props) {
    super(props);
  }
  render() {
    return (
      <StyleProvider style={getTheme(material)}>
        <Container>
          <Content>
            <Text>
              I have changed the text color.
            </Text>
          </Content>
          <CustomFooter screen="Home" navigation={this.props.navigation} />
        </Container>
      </StyleProvider>
    );
  }
}

CustomFooter.js

import React, {Component} from 'react';
import {FooterTab, Footer, Button, Icon} from 'native-base';

export default class CustomFooter extends Component {
  constructor(props) {
    super(props);
  }

  render() {
    const navigation = this.props.navigation;
    const activeMenu = this.props.screen;
    return (
      <Footer>
        <FooterTab>
          <Button
            active={activeMenu == 'Home' ? true : false}
            onPress={() => navigation.navigate('Home')}>
            <Icon active={activeMenu == 'Home' ? true : false} name="home" />
          </Button>
          <Button
            active={activeMenu == 'Cart' ? true : false}
            onPress={() => navigation.navigate('Cart')}>
            <Icon active={activeMenu == 'Cart' ? true : false} name="card" />
          </Button>
          <Button
            active={activeMenu == 'Map' ? true : false}
            onPress={() => navigation.navigate('Map')}>
            <Icon active={activeMenu == 'Map' ? true : false} name="map" />
          </Button>
          <Button
            active={activeMenu == 'Profile' ? true : false}
            onPress={() => navigation.navigate('Profile')}>
            <Icon
              active={activeMenu == 'Profile' ? true : false}
              name="person"
            />
          </Button>
          <Button
            active={activeMenu == 'Settings' ? true : false}
            onPress={() => navigation.navigate('Settings')}>
            <Icon
              active={activeMenu == 'Settings' ? true : false}
              name="settings"
            />
          </Button>
        </FooterTab>
      </Footer>
    );
  }
}

3) Теперь измените цвета из папки с собственной базовой темой.

перейдите в /native-base-theme/variables/material.js

найдите tabActiveBgColor и измените значение

  // FooterTab
  tabBarTextColor: '#bfc6ea',
  tabBarTextSize: 11,
  activeTab: '#fff',
  sTabBarActiveTextColor: '#007aff',
  tabBarActiveTextColor: '#fff',
  tabActiveBgColor: 'purple', // for example changed to purple color

Затем перезагрузите приложение (будьте осторожны, горячая перезагрузка иногда не действует), встряхните телефон и нажмите кнопку перезагрузки.

Вот и все.

Подробнее => https://docs.nativebase.io/Customize.html#theaming-nb-headref

person Nijat Aliyev    schedule 14.06.2020
comment
это работает для меня - person Ramil Aliyev; 12.02.2021

Вам нужно изменить значение tabActiveBgColor в platform.js, а не commonColor.js

person Awis A.    schedule 01.06.2017

Если вам нужно изменить цвет фона нижнего колонтитула, измените значение

footerDefaultBg в файле platform.js

Чтобы изменить цвет выбранной кнопки в нижнем колонтитуле или любом другом месте, измените значение

"tabActiveBgColor" на той же платформе.js .

person S Debasish Nayak    schedule 20.11.2018

Установите реквизит style для FooterTab следующим образом:

<Footer style={{ borderTopWidth: 0 }} >
    <FooterTab>
        <Button active>
            <Icon active name="food" size={24}  />
            <Text active>Lunch Box</Text>
        </Button>
        <Button>
            <Icon name="coins" size={24} />
            <Text>Point</Text>
        </Button>
        <Button>
            <Icon name="face" size={24} />
            <Text>Profile</Text>
        </Button>
    </FooterTab>
</Footer>

Я также добавил { borderTopWidth: 0 } к реквизиту style нижнего колонтитула, потому что обычно над нижним колонтитулом есть тонкая белая линия. Этот вопрос был задан здесь:

Как удалить нижнюю строку заголовка и верхнюю строку нижнего колонтитула в исходной базе?

person Pranav Lende    schedule 17.06.2020
comment
Это решение не рекомендуется. Потому что activetabbgColor не меняется. - person Nijat Aliyev; 17.06.2020
comment
Для отображаемого кода я просто дословно скопировал код из исходного вопроса и добавил {borderTopWidth: 0} к свойствам стиля компонента нижнего колонтитула. Я не смотрел на backgroundColor элемента FooterTab, но это хороший момент. Спасибо, что подняли этот вопрос. - person Pranav Lende; 25.06.2020