Files
OrionTV/docs/MOBILE_TABLET_ADAPTATION.md

7.9 KiB
Raw Permalink Blame History

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

// 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: 保持现有测试覆盖

测试要点

  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