To "remove" the tab icon, we can set its color to transparent. However, there is no direct way to manipulate the tab icon's color within @react-navigation/material-bottom-tabs
.
@react-navigation/material-bottom-tabs
is a wrapper of BottomNavigation
in react-native-paper
. Thus, the issue is with react-native-paper
. This SO question addresses the exact problem. We need to make changes to the theme, where the tab icon's color can be controlled.
However, according to the doc, theme from react-native-paper
cannot be directly applied to react navigation. We have to use Provider
from react-native-paper
and apply the theme to the Provider
.
See the sample code and effect below.

import * as React from 'react';
import {Text, View} from 'react-native';
import {
NavigationContainer,
useNavigationContainerRef,
} from '@react-navigation/native';
import {createMaterialBottomTabNavigator} from '@react-navigation/material-bottom-tabs';
import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons';
import {DefaultTheme, Provider} from 'react-native-paper';
const Tab = createMaterialBottomTabNavigator();
function HomeScreen() {
return (
<View style={{flex: 1, justifyContent: 'center', alignItems: 'center'}}>
<Text>Home!</Text>
</View>
);
}
function ProfileScreen() {
return (
<View style={{flex: 1, justifyContent: 'center', alignItems: 'center'}}>
<Text>Profile!</Text>
</View>
);
}
function SettingsScreen() {
return (
<View style={{flex: 1, justifyContent: 'center', alignItems: 'center'}}>
<Text>Settings!</Text>
</View>
);
}
const App = () => {
const barColors = {
home: 'aqua',
settings: 'gold',
profile: 'lawngreen',
};
const [tab, setTab] = React.useState<keyof typeof barColors>('home');
const navRef = useNavigationContainerRef();
React.useEffect(() => {
const unsubscribe = navRef.addListener('state', () => {
const currRoute = navRef.getCurrentRoute();
if (currRoute) {
// A work-around to set background color for the bar after the ripple
// effect completes. The 200 ms delay comes from trial and error
setTimeout(() => setTab(currRoute.name as keyof typeof barColors), 200);
}
});
return unsubscribe;
});
return (
<NavigationContainer ref={navRef}>
<Tab.Navigator
initialRouteName="home"
shifting={true}
activeColor="#e91e63"
barStyle={{
backgroundColor: barColors[tab],
}}>
<Tab.Screen
name="home"
component={HomeScreen}
options={{
tabBarColor: barColors.home,
tabBarLabel: 'Home',
tabBarIcon: ({color}) => (
<MaterialCommunityIcons name="home" color={color} size={26} />
),
}}
/>
<Tab.Screen
name="settings"
component={SettingsScreen}
options={{
tabBarColor: barColors.settings,
tabBarLabel: 'Settings',
tabBarIcon: ({color}) => (
<MaterialCommunityIcons name="cog" color={color} size={26} />
),
}}
/>
<Tab.Screen
name="profile"
component={ProfileScreen}
options={{
tabBarColor: barColors.profile,
tabBarLabel: 'Profile',
tabBarIcon: ({color}) => (
<MaterialCommunityIcons name="account" color={color} size={26} />
),
}}
/>
</Tab.Navigator>
</NavigationContainer>
);
};
const theme = {
...DefaultTheme,
colors: {
...DefaultTheme.colors,
secondaryContainer: 'transparent', // Use transparent to disable the little highlighting oval
},
};
export default function Main() {
return (
<Provider theme={theme}>
<App />
</Provider>
);
}