rn 底部导航栏

秒速五厘米 2021-07-24 23:57 764阅读 0赞
  1. (1)安装
  2. yarn add @react-navigation/native
  3. yarn add react-native-gesture-handler react-native-reanimated react-native-screens react-native-safe-area-context @react-native-community/masked-view
  4. yarn add @react-navigation/bottom-tabs
  5. (2)导入
  6. import 'react-native-gesture-handler';
  7. import { NavigationContainer } from '@react-navigation/native';
  8. import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
  9. (3)使用
  10. const Tab = createBottomTabNavigator();
  11. <NavigationContainer>
  12. <Tab.Navigator>
  13. <Tab.Screen name="Home" component={HomeScreen} />
  14. <Tab.Screen name="Settings" component={SettingsScreen} />
  15. </Tab.Navigator>
  16. </NavigationContainer>
  17. (4)配置参数
  18. Tab.Navigator:
  19. (1)initialRouteName
  20. (2)screenOptions
  21. (3)backBehavior 返回按钮处理的行为。
  22. initialRoute 返回初始选项卡
  23. order 返回到上一个选项卡(按照选项卡栏中显示的顺序)
  24. history 返回到上次访问的标签页
  25. none 不处理后退按钮
  26. (4)lazy 默认值为true。如果为false,则立即呈现所有选项卡。当为true时,选项卡只有在第一次激活时才会呈现。注意:标签不会在以后的访问中重新呈现。
  27. (5)tabBar: 通过函数返回一个react元素,来自定义底部按钮
  28. tabBar={props => <MyTabBar {...props} />}
  29. (6)tabBarOptions 一个包含默认选项卡栏组件道具的对象。如果您使用自定义标签栏,这些将作为道具传递到标签栏,您可以处理它们。
  30. tabBarOptions:{
  31. {
  32. activeTintColor 选中标签项的标签和图标颜色
  33. inactiveTintColor 非选中选项卡项的标签和图标颜色。
  34. activeBackgroundColor
  35. inactiveBackgroundColor
  36. tabStyle 选项卡项的样式。
  37. showLabel 是否为选项卡显示标签,默认为真。
  38. labelStyle
  39. labelPosition 标签是在图标下面还是在图标旁边呈现。可能的值是:
  40. below-icon
  41. beside-icon
  42. adaptive 标签图标和标签的对齐是否应该根据屏幕的大小而改变?默认值为true
  43. allowFontScaling 标签字体是否应缩放以尊重文本大小可访问性设置,默认为真。
  44. keyboardHidesTabBar 当键盘打开时,标签栏是否隐藏。默认值为false
  45. safeAreaInsets 安全区域为屏幕嵌入。这是用来避免像凹槽和系统导航条这样的元素。默认情况下,设备的安全区域insets会被自动检测。您可以使用此选项覆盖行为。
  46. top
  47. right
  48. bottom
  49. left
  50. style 选项卡栏的样式对象。
  51. }}
  52. Tab.Screen:
  53. options={
  54. {
  55. (1)title 可以用作headerTitletabBarLabel回退的通用标题。
  56. (2)tabBarVisible truefalse表示显示或隐藏标签栏,如果未设置,则默认为true
  57. (3)tabBarIcon
  58. tabBarIcon:({ focused, color, size })=>{
  59. return (react元素...)
  60. }
  61. (4)tabBarLabel 选项文字
  62. 给定字符串或者返回一个({ focused, color})React元素
  63. (5)tabBarBadge 要在选项卡图标上的徽章中显示的文本。接受字符串或数字。
  64. (6)tabBarButton 函数,该函数返回一个React元素以呈现为选项卡栏按钮。它包装图标和标签并实现
  65. tabBarButton: props => <xx {...props} />
  66. (7)tabBarAccessibilityLabel 选项卡按钮的可访问性标签。当用户点击选项卡时,屏幕阅读器将读取该选项卡。如果您没有标签,建议设置这个选项卡。
  67. (8)tabBarTestID ID来在测试中定位此选项卡按钮。
  68. (9)unmountOnBlur 当导航离开该屏幕时,是否应卸载该屏幕。卸载屏幕将重置屏幕中的任何本地状态以及屏幕中嵌套导航器的状态。默认值为false。通常,我们不建议启用这个功能,因为用户不希望在切换标签时丢失导航历史。如果你启用这个道具,请考虑这是否真的会为用户提供更好的体验。
  69. }}
  70. (5)navigation导航器可绑定的事件
  71. navigation.addListener('tabPress',(e)=>{...})
  72. navigation.addListener('tabLongPress', (e) => {...})
  73. (6)跳转方法
  74. navigation.jumpTo('Profile', { name: 'Michaś' });

代码示例:

  1. import React,{ Component} from 'react'
  2. import 'react-native-gesture-handler';
  3. import { NavigationContainer } from '@react-navigation/native';
  4. import { createStackNavigator } from '@react-navigation/stack';
  5. import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
  6. import FontAwesome from 'react-native-vector-icons/FontAwesome';
  7. import {
  8. View,
  9. Text,
  10. StyleSheet,
  11. Button
  12. } from 'react-native'
  13. class App extends Component{
  14. render()
  15. {
  16. const Stack = createStackNavigator();
  17. const Tab = createBottomTabNavigator();
  18. return(
  19. <NavigationContainer>
  20. <Tab.Navigator
  21. tabBarOptions={ {
  22. activeTintColor: '#e91e63',
  23. inactiveTintColor:'blue'
  24. }}
  25. >
  26. <Tab.Screen name="Home" component={ Home} options={ {
  27. tabBarIcon:({ color,size})=>{
  28. return <FontAwesome name="rocket" size={ 30} color={ color}/>
  29. }
  30. }}/>
  31. <Tab.Screen name="Detail" component={ Detail} options={ {
  32. tabBarIcon:({ color,size})=>{
  33. return <FontAwesome name="music" size={ 30} color={ color}/>
  34. }
  35. }} />
  36. </Tab.Navigator>
  37. </NavigationContainer>
  38. )
  39. }
  40. }
  41. class Home extends Component{
  42. render()
  43. {
  44. console.log
  45. return(
  46. <View>
  47. <Text>homea</Text>
  48. <FontAwesome name="rocket" size={ 30} color="#900"/>
  49. <Button
  50. onPress={ ()=>{
  51. this.props.navigation.navigate('Detail');
  52. }}
  53. title='go'
  54. />
  55. </View>
  56. )
  57. }
  58. }
  59. class Detail extends Component{
  60. render()
  61. {
  62. return(
  63. <View>
  64. <Text>details</Text>
  65. </View>
  66. )
  67. }
  68. }
  69. const styles = StyleSheet.create({
  70. })
  71. export default App

发表评论

表情:
评论列表 (有 0 条评论,764人围观)

还没有评论,来说两句吧...

相关阅读

    相关 底部导航

    1.添加相应的文件 2.分别加入4个Fragment以及布局文件 3.MianActivity的引用 4.MainActivity的布局文件   添加相应的文件: