topTabNavigator label not showing - react-native

I have the following tobtabNavigator but the labels are not showing and I am not sure why. It is just blank as shown bellow
import {createMaterialTopTabNavigator} from '#react-navigation/material-top-tabs';
const Tab = createMaterialTopTabNavigator();
const DeustchScreen = () => {
return (
<Tab.Navigator
screenOptions={{
tabBarLabelStyle: {fontSize: 12, color: 'red'},
}}>
<Tab.Screen name="a" component={Deutsch} />
<Tab.Screen name="b" component={Deutsch} />
<Tab.Screen name="c" component={Deutsch} />
<Tab.Screen name="d" component={Deutsch} />
<Tab.Screen name="e" component={Deutsch} />
<Tab.Screen name="f" component={Deutsch} />
<Tab.Screen name="g" component={Deutsch} />
</Tab.Navigator>
);
};

you can check here in this snack, your code is working :
https://snack.expo.dev/-aQ4MaWt7
Hope it helps .feel free for doubts

I was using #react-native-community/viewpager instead of react-native-pager-view. Also in the screenOptions, I needed to specify tabBarItemStyle: {width:100}

Related

How to link from drawer Item to external website react-native-expo

I have here this drawer
return (
<NavigationContainer >
<Drawer.Navigator initialRouteName="MetalDetector" screenOptions={{
drawerStyle: {
backgroundColor: '#8e9dad',
width: 220
}
}}>
<Drawer.Screen name="MetalDetector" component={Home} options={{
headerRight: () => (
<Entypo name="sound" size={24} color="black" />
),
drawerLabel: '๐Ÿ›  MetalDetector'
}} />
<Drawer.Screen name="Settings" component={Settings} options={{drawerLabel: '๐Ÿ›  Settings'}} />
<Drawer.Screen name="Calibrate" component={Home} options={{drawerLabel: '๐Ÿ’ก Calibration'}}/>
<Drawer.Screen name="Feedback" component={Home} options={{drawerLabel: '๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ Feedback'}}/>
<Drawer.Screen name="Website" component={Home} options={{drawerLabel: '๐ŸŒŽ Website'}} />
</Drawer.Navigator>
</NavigationContainer>
);
}
I have added a few drawerScreens, like settings calibration feedback and website, but how can i make it that when someone clicks on website that he gets actually redirected to a website?
Currently I have
<Drawer.Screen name="Website" component={Home} options={{drawerLabel: '๐ŸŒŽ Website'}} />
I tried to add an onclick and onPress function but when removing the component I get an error and with using the component I cant link to anywhere
How can i fix this?
You can do this using drawerContent prop. Check out this Snack to see how it's done.

How to reach to the top of the stack when pressing tab in react native?

I got 5 buttons of tabs navigator. You can consider them as a,b,c,d,e
The thing is when I am in a I will goes into the screen called a.1. So I am basically in the a.1.
Inside the a.1 screen I can goes into b or c or ...
So I will goes into b from a.1screen
The thing is that when I press tab navigator button for a. I reached to the a.1 rather than reaching directly to a.
How can I avoid this behavior
const a = () => (
<Stack.Navigator initialRouteName={"a1"}>
<Stack.Screen name={"a1"} component={a1} />
<Stack.Screen name={"a2"} component={a2} />
</Stack.Navigator>
);
const b = () => (
<Stack.Navigator>
<Stack.Screen name={"b1"} component={b1} />
<Stack.Screen name={"b2"} component={b2} />
</Stack.Navigator>
);
const TabNavigator = () => {
return (
<Tab.Navigator>
<Tab.Screen name="a" component={a} />
<Tab.Screen name="b" component={b} />
<Tab.Screen name="c" component={c} />
</Tab.Navigator>
);
};
That is called 'NestedNavigation'. In above navigation, the bottom tab will appear in every srceens. If you don't want that feature, you can add 'Tab' into 'Stack'. Like this.
const TabNavigator = () => (
<Tab.Navigator>
<Tab.Screen name="a" component={a} />
<Tab.Screen name="b" component={b} />
<Tab.Screen name="c" component={c} />
</Tab.Navigator>
);
const StackNavigator = () => {
return (
<Stack.Navigator initialRouteName={"TabNavigator"}>
<Stack.Screen name={"TabNavigator"} component={TabNavigator} />
<Stack.Screen name={"a1"} component={a1} />
<Stack.Screen name={"a2"} component={a2} />
<Stack.Screen name={"b1"} component={b1} />
<Stack.Screen name={"b2"} component={b2} />
</Stack.Navigator>
);
};
Even if my answer does not directly answer your question, I hope it might give u some idea of nested navigation.
You can use 'initialRouteName' to show the initialScreen of any navigators.
In case, I mis-understood your question. Here is how to overwrite 'Tab Navigation' onPress function.
<Tab.Screen
name="Chat"
component={Chat}
listeners={({ navigation, route }) => ({
tabPress: (e) => {
// Prevent default action
e.preventDefault();
// Do something with the `navigation` object
navigation.navigate('AnotherPlace');
},
})}
/>
you can achieve it by resetting the stack when you leave the tab a, so that you are in the first screen when you come back to tab a.
Here's the official documentation and example:
https://www.reactnativeschool.com/reset-stack-inside-tab-after-leaving-tab

Changing the direction of the animation for a particular screen in StackNavigator?

I need to change the animation of navigation to bottom-to-top for a particular screen in the stack-navigator in Navigation 5.0.
I looked for the answers in StackOverflow but didn't find a solution related to a single screen. So here's the solution if someone is looking for the answer.
options={{cardStyleInterpolator: CardStyleInterpolators.forVerticalIOS}}
import { CardStyleInterpolators,createStackNavigator } from "#react-navigation/stack";
<AppStack.Navigator headerMode="none" initialRouteName={"Home"}>
<AppStack.Screen name="Home" component={HomeScreen} />
<AppStack.Screen
options={{
cardStyleInterpolator: CardStyleInterpolators.forVerticalIOS,
}}
name="Edit"
component={EditScreen}
/>
<AppStack.Screen name="Settings" component={SettingScreen} />
</>
)}
</AppStack.Navigator>

React Native Tab Navigator first tab is focused by default

I'm using React Native BottomTabNavigator.
Example:
<Tab.Navigator tabBarOptions={tabBarOptions} screenOptions={screenOptions}>
<Tab.Screen name="Home" component={Home} />
<Tab.Screen name="Saved" component={Saved} />
<Tab.Screen name="Map" component={Map} />
<Tab.Screen name="Profile" component={Profile} />
</Tab.Navigator>
I want to make the last tab focused instead of the first.
I can't find any option in the documentation.
It should be something like options={{ focused: true }}
Or maybe it's not implemented at all
<Tab.Navigator initialRouteName={"Your Initial Screen Name"}
...>
</Tab.Navigator>

React Native Custom icon / image in Tab.Screen navigation

I have a bottomtab in my React Native setup;
<NavigationContainer>
<Tab.Navigator>
<Tab.Screen name="News" component={News} />
<Tab.Screen name="Mens" component={Mens} />
<Tab.Screen name="Ladies" component={Ladies} />
<Tab.Screen name="Watch" component={Fixtures} />
</Tab.Navigator>
</NavigationContainer>
What I'd like to do is add in the middle a dummy Tab so I can add a custom icon;
<NavigationContainer>
<Tab.Navigator>
<Tab.Screen name="News" component={News} />
<Tab.Screen name="Mens" component={Mens} />
<Tab.Screen name="logo" />
<Tab.Screen name="Ladies" component={Ladies} />
<Tab.Screen name="Watch" component={Fixtures} />
</Tab.Navigator>
</NavigationContainer>
The challenge I'm having is where to start (TabBarOptions doesn't appear to work within the tab.screen). I've found loads of explains (they seem like overkill for adding an icon), but they all use pre-defined icon sets. What I want to do is create an icon from a custom image and then use that for the logo tab so it appears in my bottom navigation.
You can set the tabbaricon like below. The there are parameters for focused as well which you can use to set images based on condition.
<Tab.Screen
name="Settings1"
component={SettingsScreen}
options={{
title: 'My profile',
tabBarIcon: ({size,focused,color}) => {
return (
<Image
style={{ width: size, height: size }}
source={{
uri:
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAAzCAYAAAA6oTAqAAAAEXRFWHRTb2Z0d2FyZQBwbmdjcnVzaEB1SfMAAABQSURBVGje7dSxCQBACARB+2/ab8BEeQNhFi6WSYzYLYudDQYGBgYGBgYGBgYGBgYGBgZmcvDqYGBgmhivGQYGBgYGBgYGBgYGBgYGBgbmQw+P/eMrC5UTVAAAAABJRU5ErkJggg==',
}}
/>
);
},
}}
/>