App.tsx 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. import React from 'react';
  2. import { Image } from 'react-native';
  3. import { NavigationContainer } from '@react-navigation/native';
  4. import { createNativeStackNavigator } from '@react-navigation/native-stack';
  5. import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
  6. // 页面组件
  7. import LoginScreen from './src/pages/Login';
  8. import TeamScreen from './src/pages/Team';
  9. import DataScreen from './src/pages/Data';
  10. import PlayScreen from './src/pages/Play';
  11. import MatchScreen from './src/pages/Match';
  12. import MeScreen from './src/pages/Me';
  13. // 导入自定义图片(请替换为你的实际图片路径)
  14. import TeamIcon from './src/static/images/common/team.png';
  15. import TeamIconActive from './src/static/images/common/team_active.png';
  16. import DataIcon from './src/static/images/common/data.png';
  17. import DataIconActive from './src/static/images/common/data_active.png';
  18. import PlayIcon from './src/static/images/common/play.png';
  19. import PlayIconActive from './src/static/images/common/play_active.png';
  20. import MatchIcon from './src/static/images/common/match.png';
  21. import MatchIconActive from './src/static/images/common/match_active.png';
  22. import MeIcon from './src/static/images/common/me.png';
  23. import MeIconActive from './src/static/images/common/me_active.png';
  24. const Stack = createNativeStackNavigator();
  25. const Tab = createBottomTabNavigator();
  26. // 定义底部Tab导航
  27. function TabNavigator() {
  28. return (
  29. <Tab.Navigator
  30. initialRouteName="Team" // 设置默认显示Team页签
  31. screenOptions={({ route }) => ({
  32. tabBarIcon: ({ focused }) => {
  33. if (route.name === 'Team') {
  34. return (
  35. <Image
  36. source={focused ? TeamIconActive : TeamIcon}
  37. style={{ width: 24, height: 24 }}
  38. resizeMode="contain"
  39. />
  40. );
  41. } else if (route.name === 'Data') {
  42. return (
  43. <Image
  44. source={focused ? DataIconActive : DataIcon}
  45. style={{ width: 24, height: 24 }}
  46. resizeMode="contain"
  47. />
  48. );
  49. } else if (route.name === 'Play') {
  50. return (
  51. <Image
  52. source={focused ? PlayIconActive : PlayIcon}
  53. style={{ width: 24, height: 24 }}
  54. resizeMode="contain"
  55. />
  56. );
  57. } else if (route.name === 'Match') {
  58. return (
  59. <Image
  60. source={focused ? MatchIconActive : MatchIcon}
  61. style={{ width: 24, height: 24 }}
  62. resizeMode="contain"
  63. />
  64. );
  65. } else if (route.name === 'Me') {
  66. return (
  67. <Image
  68. source={focused ? MeIconActive : MeIcon}
  69. style={{ width: 24, height: 24 }}
  70. resizeMode="contain"
  71. />
  72. );
  73. }
  74. return null;
  75. },
  76. tabBarActiveTintColor: '#007AFF',
  77. tabBarInactiveTintColor: '#999',
  78. headerShown: false,
  79. tabBarStyle: {
  80. height: 58,
  81. paddingBottom: 8,
  82. paddingTop: 8,
  83. backgroundColor: '#fff',
  84. borderTopWidth: 0,
  85. elevation: 5,
  86. shadowColor: '#000',
  87. shadowOffset: { width: 0, height: -2 },
  88. shadowOpacity: 0.05,
  89. shadowRadius: 5,
  90. },
  91. })}
  92. >
  93. <Tab.Screen name="Team" component={TeamScreen} options={{ title: '球队' }} />
  94. <Tab.Screen name="Data" component={DataScreen} options={{ title: '数据' }} />
  95. <Tab.Screen name="Play" component={PlayScreen} options={{ title: 'PLAY' }} />
  96. <Tab.Screen name="Match" component={MatchScreen} options={{ title: '赛事' }} />
  97. <Tab.Screen name="Me" component={MeScreen} options={{ title: '我的' }} />
  98. </Tab.Navigator>
  99. );
  100. }
  101. function App(): React.JSX.Element {
  102. return (
  103. <NavigationContainer>
  104. <Stack.Navigator initialRouteName="MainTabs">
  105. <Stack.Screen
  106. name="Login"
  107. component={LoginScreen}
  108. options={{
  109. headerBackVisible: false,
  110. headerShown: false,
  111. }}
  112. />
  113. <Stack.Screen
  114. name="MainTabs"
  115. component={TabNavigator}
  116. options={{
  117. headerBackVisible: false,
  118. headerShown: false,
  119. }}
  120. />
  121. </Stack.Navigator>
  122. </NavigationContainer>
  123. );
  124. }
  125. export default App;