Files
OrionTV/docs/MOBILE_TABLET_ADAPTATION.md

308 lines
7.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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英尺距离观看
### 现有页面结构
1. **index.tsx** - 首页:分类选择 + 5列视频网格
2. **detail.tsx** - 详情页:横向布局,海报+信息+播放源
3. **search.tsx** - 搜索页:搜索框 + 5列结果网格
4. **play.tsx** - 播放页:全屏视频播放器 + TV遥控器控制
5. **settings.tsx** - 设置页TV遥控器导航 + 远程输入配置
6. **favorites.tsx** - 收藏页:网格布局展示收藏内容
7. **live.tsx** - 直播页:直播流播放
8. **_layout.tsx** - 根布局Stack导航 + 全局状态管理
## 适配目标
### 设备分类
- **手机端** (< 768px): 单手操作,纵向为主,触摸交互
- **平板端** (768px - 1024px): 双手操作,横竖屏,触摸+键盘
- **TV端** (> 1024px): 遥控器操作横屏10英尺距离
### 响应式设计原则
1. **内容优先**: 保持核心功能一致性
2. **渐进增强**: 根据屏幕尺寸增加功能
3. **平台原生感**: 符合各平台交互习惯
4. **性能优化**: 避免不必要的重新渲染
## 技术实施方案
### 阶段1: 响应式基础架构
#### 1.1 创建响应式 Hook
```typescript
// 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 断点定义
```typescript
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 组件选择器
```typescript
// 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 构建脚本更新
```json
{
"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**: 保持现有测试覆盖
### 测试要点
1. **响应式布局**: 不同屏幕尺寸正确显示
2. **交互体验**: 触摸、手势、导航流畅
3. **性能表现**: 启动速度、滚动性能、内存使用
4. **兼容性**: 不同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*