diff --git a/app/(tabs)/personal.tsx b/app/(tabs)/personal.tsx
index d4fbcaa..39431e8 100644
--- a/app/(tabs)/personal.tsx
+++ b/app/(tabs)/personal.tsx
@@ -1,110 +1,387 @@
-import { Image } from 'expo-image';
-import { Platform, StyleSheet } from 'react-native';
+import { Colors } from '@/constants/Colors';
+import { useColorScheme } from '@/hooks/useColorScheme';
+import { Ionicons } from '@expo/vector-icons';
+import React, { useState } from 'react';
+import {
+ SafeAreaView,
+ ScrollView,
+ StatusBar,
+ StyleSheet,
+ Switch,
+ Text,
+ TouchableOpacity,
+ View
+} from 'react-native';
-import { Collapsible } from '@/components/Collapsible';
-import { ExternalLink } from '@/components/ExternalLink';
-import ParallaxScrollView from '@/components/ParallaxScrollView';
-import { ThemedText } from '@/components/ThemedText';
-import { ThemedView } from '@/components/ThemedView';
-import { IconSymbol } from '@/components/ui/IconSymbol';
+export default function PersonalScreen() {
+ const [notificationEnabled, setNotificationEnabled] = useState(true);
+ const colorScheme = useColorScheme();
+ const colors = Colors[colorScheme ?? 'light'];
+
+ const ProfileHeader = () => (
+
+ {/* 标题 */}
+ Profile
+
+ );
+
+ const UserInfoSection = () => (
+
+
+ {/* 头像 */}
+
+
+
+ {/* 简单的头像图标,您可以替换为实际图片 */}
+
+
+
+
+
+
+
+
+ {/* 用户信息 */}
+
+ Masi Ramezanzade
+ Lose a Fat Program
+
+
+ {/* 编辑按钮 */}
+
+ Edit
+
+
+
+ );
+
+ const StatsSection = () => (
+
+
+ 180cm
+ Height
+
+
+ 65kg
+ Weight
+
+
+ 22yo
+ Age
+
+
+ );
+
+ const MenuSection = ({ title, items }: { title: string; items: any[] }) => (
+
+ {title}
+ {items.map((item, index) => (
+
+
+
+
+
+ {item.title}
+
+ {item.type === 'switch' ? (
+
+ ) : (
+
+ )}
+
+ ))}
+
+ );
+
+ // 动态创建样式
+ const dynamicStyles = {
+ editButton: {
+ backgroundColor: colors.primary,
+ paddingHorizontal: 20,
+ paddingVertical: 10,
+ borderRadius: 20,
+ },
+ editButtonText: {
+ color: '#192126',
+ fontSize: 14,
+ fontWeight: '600' as const,
+ },
+ statValue: {
+ fontSize: 18,
+ fontWeight: 'bold' as const,
+ color: colors.primary,
+ marginBottom: 4,
+ },
+ floatingButton: {
+ width: 56,
+ height: 56,
+ borderRadius: 28,
+ backgroundColor: colors.primary,
+ alignItems: 'center' as const,
+ justifyContent: 'center' as const,
+ shadowColor: colors.primary,
+ shadowOffset: {
+ width: 0,
+ height: 4,
+ },
+ shadowOpacity: 0.3,
+ shadowRadius: 8,
+ elevation: 8,
+ },
+ };
+
+ const accountItems = [
+ {
+ icon: 'person-outline',
+ iconBg: '#E8F5E8',
+ iconColor: '#4ADE80',
+ title: 'Personal Data',
+ },
+ {
+ icon: 'trophy-outline',
+ iconBg: '#E8F5E8',
+ iconColor: '#4ADE80',
+ title: 'Achievement',
+ },
+ {
+ icon: 'time-outline',
+ iconBg: '#E8F5E8',
+ iconColor: '#4ADE80',
+ title: 'Activity History',
+ },
+ {
+ icon: 'stats-chart-outline',
+ iconBg: '#E8F5E8',
+ iconColor: '#4ADE80',
+ title: 'Workout Progress',
+ },
+ ];
+
+ const notificationItems = [
+ {
+ icon: 'notifications-outline',
+ iconBg: '#E8F5E8',
+ iconColor: '#4ADE80',
+ title: 'Pop-up Notification',
+ type: 'switch',
+ },
+ ];
+
+ const otherItems = [
+ {
+ icon: 'mail-outline',
+ iconBg: '#E8F5E8',
+ iconColor: '#4ADE80',
+ title: 'Contact Us',
+ },
+ {
+ icon: 'shield-checkmark-outline',
+ iconBg: '#E8F5E8',
+ iconColor: '#4ADE80',
+ title: 'Privacy Policy',
+ },
+ {
+ icon: 'settings-outline',
+ iconBg: '#E8F5E8',
+ iconColor: '#4ADE80',
+ title: 'Settings',
+ },
+ ];
-export default function TabTwoScreen() {
return (
-
- }>
-
- Explore
-
- This app includes example code to help you get started.
-
-
- This app has two screens:{' '}
- app/(tabs)/index.tsx and{' '}
- app/(tabs)/explore.tsx
-
-
- The layout file in app/(tabs)/_layout.tsx{' '}
- sets up the tab navigator.
-
-
- Learn more
-
-
-
-
- You can open this project on Android, iOS, and the web. To open the web version, press{' '}
- w in the terminal running this project.
-
-
-
-
- For static images, you can use the @2x and{' '}
- @3x suffixes to provide files for
- different screen densities
-
-
-
- Learn more
-
-
-
-
- Open app/_layout.tsx to see how to load{' '}
-
- custom fonts such as this one.
-
-
-
- Learn more
-
-
-
-
- This template has light and dark mode support. The{' '}
- useColorScheme() hook lets you inspect
- what the user's current color scheme is, and so you can adjust UI colors accordingly.
-
-
- Learn more
-
-
-
-
- This template includes an example of an animated component. The{' '}
- components/HelloWave.tsx component uses
- the powerful react-native-reanimated{' '}
- library to create a waving hand animation.
-
- {Platform.select({
- ios: (
-
- The components/ParallaxScrollView.tsx{' '}
- component provides a parallax effect for the header image.
-
- ),
- })}
-
-
+
+
+
+
+
+
+
+
+
+
+
+ {/* 底部浮动按钮 */}
+
+
+
+
+
+
+
+
);
}
const styles = StyleSheet.create({
- headerImage: {
- color: '#808080',
- bottom: -90,
- left: -35,
- position: 'absolute',
+ container: {
+ flex: 1,
+ backgroundColor: '#F5F5F5', // 浅灰色背景
},
- titleContainer: {
+ safeArea: {
+ flex: 1,
+ },
+ scrollView: {
+ flex: 1,
+ paddingHorizontal: 20,
+ backgroundColor: '#F5F5F5',
+ },
+ // 头部导航
+ headerContainer: {
flexDirection: 'row',
- gap: 8,
+ alignItems: 'center',
+ justifyContent: 'center',
+ paddingTop: 10,
+ paddingBottom: 20,
},
+
+ headerTitle: {
+ fontSize: 20,
+ fontWeight: 'bold',
+ color: '#000',
+ },
+
+ // 用户信息区域
+ userInfoCard: {
+ borderRadius: 16,
+ marginBottom: 20,
+ },
+ userInfoContainer: {
+ flexDirection: 'row',
+ alignItems: 'center',
+ padding: 20,
+ },
+ avatarContainer: {
+ marginRight: 15,
+ },
+ avatar: {
+ width: 80,
+ height: 80,
+ borderRadius: 40,
+ backgroundColor: '#E8D4F0',
+ alignItems: 'center',
+ justifyContent: 'center',
+ overflow: 'hidden',
+ },
+ avatarContent: {
+ width: '100%',
+ height: '100%',
+ alignItems: 'center',
+ justifyContent: 'center',
+ },
+ avatarIcon: {
+ alignItems: 'center',
+ justifyContent: 'center',
+ },
+ avatarFace: {
+ width: 25,
+ height: 25,
+ borderRadius: 12.5,
+ backgroundColor: '#D4A574',
+ marginBottom: 5,
+ },
+ avatarBody: {
+ width: 30,
+ height: 20,
+ borderRadius: 15,
+ backgroundColor: '#F4C842',
+ },
+ userDetails: {
+ flex: 1,
+ },
+ userName: {
+ fontSize: 18,
+ fontWeight: 'bold',
+ color: '#000',
+ marginBottom: 4,
+ },
+ userProgram: {
+ fontSize: 14,
+ color: '#888',
+ },
+
+ // 统计信息区域
+ statsContainer: {
+ flexDirection: 'row',
+ justifyContent: 'space-between',
+ backgroundColor: '#FFFFFF',
+ borderRadius: 16,
+ padding: 20,
+ marginBottom: 20,
+ shadowColor: '#000',
+ shadowOffset: {
+ width: 0,
+ height: 2,
+ },
+ shadowOpacity: 0.1,
+ shadowRadius: 4,
+ elevation: 3,
+ },
+ statItem: {
+ alignItems: 'center',
+ flex: 1,
+ },
+
+ statLabel: {
+ fontSize: 12,
+ color: '#888',
+ },
+ // 菜单区域
+ menuSection: {
+ marginBottom: 20,
+ backgroundColor: '#FFFFFF',
+ padding: 16,
+ },
+ sectionTitle: {
+ fontSize: 18,
+ fontWeight: 'bold',
+ color: '#000',
+ marginBottom: 12,
+ paddingHorizontal: 4,
+ },
+ menuItem: {
+ flexDirection: 'row',
+ alignItems: 'center',
+ justifyContent: 'space-between',
+ paddingVertical: 16,
+ paddingHorizontal: 16,
+ borderRadius: 12,
+ marginBottom: 8,
+ },
+ menuItemLeft: {
+ flexDirection: 'row',
+ alignItems: 'center',
+ flex: 1,
+ },
+ menuIcon: {
+ width: 36,
+ height: 36,
+ borderRadius: 8,
+ alignItems: 'center',
+ justifyContent: 'center',
+ marginRight: 12,
+ },
+ menuItemText: {
+ fontSize: 16,
+ color: '#000',
+ flex: 1,
+ },
+ switch: {
+ transform: [{ scaleX: 0.8 }, { scaleY: 0.8 }],
+ },
+ // 浮动按钮
+ floatingButtonContainer: {
+ position: 'absolute',
+ bottom: 30,
+ left: 0,
+ right: 0,
+ alignItems: 'center',
+ pointerEvents: 'box-none',
+ },
+
});
diff --git a/constants/Colors.ts b/constants/Colors.ts
index 14e6784..2fe3936 100644
--- a/constants/Colors.ts
+++ b/constants/Colors.ts
@@ -3,7 +3,8 @@
* There are many other ways to style your app. For example, [Nativewind](https://www.nativewind.dev/), [Tamagui](https://tamagui.dev/), [unistyles](https://reactnativeunistyles.vercel.app), etc.
*/
-const tintColorLight = '#0a7ea4';
+const primaryColor = '#BBF246'; // 应用主题色
+const tintColorLight = primaryColor;
const tintColorDark = '#fff';
export const Colors = {
@@ -11,16 +12,22 @@ export const Colors = {
text: '#11181C',
background: '#fff',
tint: tintColorLight,
+ primary: primaryColor,
icon: '#687076',
tabIconDefault: '#687076',
- tabIconSelected: tintColorLight,
+ tabIconSelected: '#192126', // tab 激活时的文字/图标颜色(深色,在亮色背景上显示)
+ tabBarBackground: '#192126', // tab 栏背景色
+ tabBarActiveBackground: primaryColor, // tab 激活时的背景色
},
dark: {
text: '#ECEDEE',
background: '#151718',
tint: tintColorDark,
+ primary: primaryColor,
icon: '#9BA1A6',
tabIconDefault: '#9BA1A6',
- tabIconSelected: tintColorDark,
+ tabIconSelected: '#192126', // 在亮色背景上使用深色文字
+ tabBarBackground: '#192126',
+ tabBarActiveBackground: primaryColor,
},
};