mirror of
https://github.com/zimplexing/OrionTV.git
synced 2026-02-04 03:36:29 +08:00
7.9 KiB
7.9 KiB
OrionTV 手机端和平板端适配方案
项目概述
OrionTV 是一个基于 React Native TVOS 的视频流媒体应用,目前专为 Android TV 和 Apple TV 平台设计。本文档详细描述了将应用适配到 Android 手机和平板设备的完整方案。
当前状态分析
TV端特征
- 技术栈: React Native TVOS 0.74.x + Expo 51
- 导航: Stack 导航结构,适合遥控器操作
- 布局: 固定5列网格布局 (
NUM_COLUMNS = 5) - 交互: TV遥控器专用事件处理 (
useTVRemoteHandler) - 组件: TV专用组件 (
VideoCard.tv.tsx) - UI元素: 大间距、大按钮,适合10英尺距离观看
现有页面结构
- index.tsx - 首页:分类选择 + 5列视频网格
- detail.tsx - 详情页:横向布局,海报+信息+播放源
- search.tsx - 搜索页:搜索框 + 5列结果网格
- play.tsx - 播放页:全屏视频播放器 + TV遥控器控制
- settings.tsx - 设置页:TV遥控器导航 + 远程输入配置
- favorites.tsx - 收藏页:网格布局展示收藏内容
- live.tsx - 直播页:直播流播放
- _layout.tsx - 根布局:Stack导航 + 全局状态管理
适配目标
设备分类
- 手机端 (< 768px): 单手操作,纵向为主,触摸交互
- 平板端 (768px - 1024px): 双手操作,横竖屏,触摸+键盘
- TV端 (> 1024px): 遥控器操作,横屏,10英尺距离
响应式设计原则
- 内容优先: 保持核心功能一致性
- 渐进增强: 根据屏幕尺寸增加功能
- 平台原生感: 符合各平台交互习惯
- 性能优化: 避免不必要的重新渲染
技术实施方案
阶段1: 响应式基础架构
1.1 创建响应式 Hook
// hooks/useResponsiveLayout.ts
export interface ResponsiveConfig {
deviceType: 'mobile' | 'tablet' | 'tv';
columns: number;
cardWidth: number;
cardHeight: number;
spacing: number;
isPortrait: boolean;
}
1.2 设备检测逻辑
- 基于
Dimensions.get('window')获取屏幕尺寸 - 监听方向变化
useDeviceOrientation() - 平台检测
Platform.OS和 TV 环境变量
1.3 断点定义
const BREAKPOINTS = {
mobile: { min: 0, max: 767 },
tablet: { min: 768, max: 1023 },
tv: { min: 1024, max: Infinity }
};
阶段2: 多平台组件系统
2.1 VideoCard 组件族
- VideoCard.mobile.tsx: 纵向卡片,大触摸目标
- VideoCard.tablet.tsx: 中等卡片,平衡布局
- VideoCard.tv.tsx: 保持现有实现
2.2 组件选择器
// components/VideoCard/index.tsx
export const VideoCard = (props) => {
const { deviceType } = useResponsiveLayout();
switch(deviceType) {
case 'mobile': return <VideoCardMobile {...props} />;
case 'tablet': return <VideoCardTablet {...props} />;
case 'tv': return <VideoCardTV {...props} />;
}
};
阶段3: 导航系统重构
3.1 手机端导航
- 底部Tab导航: 首页、搜索、收藏、设置
- Header导航: 返回按钮、标题、操作按钮
- 抽屉导航: 次要功能入口
3.2 平板端导航
- 侧边栏导航: 持久化主导航
- Master-Detail: 列表+详情分屏
- Tab Bar: 内容区域二级导航
3.3 TV端导航
- 保持现有: Stack导航结构
- 遥控器优化: Focus管理和按键导航
阶段4: 页面逐一适配
4.1 首页 (index.tsx)
手机端改进:
- 1-2列网格布局
- 分类用横向滚动标签
- 下拉刷新
- 上拉加载更多
平板端改进:
- 2-3列网格布局
- 左侧分类侧边栏
- 内容区域可滚动
- 支持横竖屏切换
TV端保持:
- 5列网格布局
- 遥控器导航
- 现有交互逻辑
4.2 详情页 (detail.tsx)
手机端改进:
- 纵向布局:海报→信息→播放源→剧集
- 海报占屏幕宽度40%
- 播放源横向滚动
- 剧集网格4-5列
平板端改进:
- 左右分栏:海报+信息 | 播放源+剧集
- 海报固定尺寸
- 播放源卡片式布局
- 剧集6-8列网格
4.3 搜索页 (search.tsx)
手机端改进:
- 优化键盘输入体验
- 搜索历史和推荐
- 2列结果网格
- 筛选和排序功能
平板端改进:
- 更大的搜索框
- 3列结果网格
- 侧边栏筛选选项
- 搜索建议下拉
4.4 播放页 (play.tsx)
手机端改进:
- 触摸控制替代遥控器
- 手势操作:双击暂停、滑动调节
- 竖屏小窗播放模式
- 亮度和音量调节
平板端改进:
- 触摸+手势控制
- 画中画模式支持
- 外接键盘快捷键
- 更大的控制按钮
4.5 设置页 (settings.tsx)
手机端改进:
- 分组设置列表
- 原生选择器和开关
- 键盘友好的输入框
- 滚动优化
平板端改进:
- 左侧设置分类,右侧设置详情
- 更大的输入区域
- 实时预览效果
- 批量操作支持
阶段5: 组件库升级
5.1 触摸优化组件
- TouchableButton: 44px最小触摸目标
- SwipeableCard: 支持滑动操作
- PullToRefresh: 下拉刷新组件
- InfiniteScroll: 无限滚动加载
5.2 手势处理
- PinchToZoom: 双指缩放
- SwipeNavigation: 滑动导航
- LongPressMenu: 长按菜单
- DoubleTapHandler: 双击处理
5.3 响应式工具
- ResponsiveText: 自适应字体大小
- ResponsiveSpacing: 自适应间距
- ConditionalRender: 条件渲染组件
- OrientationHandler: 方向变化处理
阶段6: 构建和部署
6.1 构建脚本更新
{
"scripts": {
"android-mobile": "EXPO_USE_METRO_WORKSPACE_ROOT=1 expo run:android",
"android-tablet": "EXPO_USE_METRO_WORKSPACE_ROOT=1 expo run:android --device tablet",
"android-tv": "EXPO_TV=1 EXPO_USE_METRO_WORKSPACE_ROOT=1 expo run:android"
}
}
6.2 配置文件适配
- app.json: 多平台配置
- metro.config.js: 条件资源加载
- package.json: 平台特定依赖
6.3 资源文件
- 手机端应用图标 (48dp-192dp)
- 平板端应用图标 (优化尺寸)
- 启动屏适配不同分辨率
- 自适应图标 (Adaptive Icons)
测试计划
测试设备覆盖
- 手机: Android 5.0-14, 屏幕 4"-7"
- 平板: Android 平板 7"-12", 横竖屏
- TV: 保持现有测试覆盖
测试要点
- 响应式布局: 不同屏幕尺寸正确显示
- 交互体验: 触摸、手势、导航流畅
- 性能表现: 启动速度、滚动性能、内存使用
- 兼容性: 不同Android版本和设备
自动化测试
- Jest单元测试覆盖新组件
- E2E测试核心用户流程
- 视觉回归测试UI一致性
- 性能基准测试
风险评估
技术风险
- 复杂度增加: 多平台适配增加维护成本
- 性能影响: 条件渲染可能影响性能
- 测试覆盖: 需要覆盖更多设备组合
缓解策略
- 渐进式迁移,优先核心功能
- 性能监控和优化
- 自动化测试保证质量
- 代码复用最大化
实施时间表
第1周: 基础架构
- 响应式Hook开发
- 多平台组件框架
- 基础样式系统
第2周: 核心页面适配
- 首页手机/平板适配
- 详情页手机/平板适配
- 搜索页手机/平板适配
第3周: 功能完善
- 播放页适配
- 设置页适配
- 导航系统重构
第4周: 优化和测试
- 组件库升级
- 性能优化
- 全面测试
成功指标
用户体验指标
- 应用启动时间 < 3秒
- 页面切换流畅度 > 95%
- 触摸响应延迟 < 100ms
- 用户满意度 > 4.5/5
技术指标
- 代码复用率 > 80%
- 自动化测试覆盖率 > 90%
- 应用包大小增长 < 20%
- 内存使用优化 > 15%
附录
参考资料
- [React Native 响应式设计指南]
- [Material Design 自适应布局]
- [TV应用设计最佳实践]
相关文档
- 项目架构文档 (CLAUDE.md)
- TV端开发指南
- 组件库使用手册
最后更新: 2025-08-01 版本: 1.0