这是一个基于 Wear OS 的智能词汇记忆应用程序,利用 Jetpack Compose 构建界面,旨在帮助用户高效记忆单词。
- 批次学习系统:
- 将单词分为多个批次进行学习和复习。
- 智能混合需要复习的单词和新的未学习单词组成记忆批次(目标最多 40 个:20 复习 + 20 新词)。
- 艾宾浩斯复习计划:
- 基于简化的艾宾浩斯遗忘曲线,自动计算并安排单词的复习时间。
- 优先复习到期的单词。
- 批次内记忆度:
- 跟踪每个单词在当前学习批次中的记忆熟练度(0 到 4 级)。
- 通过交互(点击按钮或滑动)动态更新记忆度。
- 动态 UI 反馈:
- 当单词记忆度达到 3 级时,自动隐藏中文释义,鼓励用户主动回忆。
- 界面上显示清晰的记忆等级指示器(圆点)。
- 微光模式支持:
- 当手表进入微光模式时,显示简化的低功耗界面,仅保留单词和音标。
- 黑底灰字设计,最大程度减少OLED屏幕的电量消耗。
- 自动禁用音频播放和复杂交互,延长电池续航。
- 多维信息展示:
- 下滑: 查看单词相关例句 (支持左右滑动切换多条例句)。
- 上滑: 查看单词的词根词缀信息。
- 词根页左滑: 查看包含该单词的常见词组及其释义。
- 直观交互:
- 主界面左右滑动:
- 左滑 (下一个): 将当前单词记忆度 +1,然后导航到下一个未完成的单词。
- 右滑 (上一个): 导航到列表中的前一个单词(不跳过已完成的),然后将这个到达的单词记忆度 -1(如果大于 0)。
- 例句界面左右滑动: 切换上一句/下一句。
- 词根界面左滑: 导航到词组界面。
- 词组界面右滑: 导航回词根界面。
- 词根/词组/例句界面上下滑动: 返回单词主界面。
- 按钮操作: 提供明确的"记住了"和"忘记了"按钮。
- 点击"记住了" (✓): 将当前单词记忆度 +1,然后导航到下一个未完成的单词 (效果类似左滑)。
- 点击"忘记了" (✗): 将当前单词记忆度清零,并停留在当前单词。
- 单词在本批次记忆度达到 4 后将不再出现在学习流中(左滑和"记住了"按钮会跳过),直到下一个复习周期。
- 主界面左右滑动:
- 单词发音: 点击单词旁边的发音图标可播放对应的 MP3 音频。
- 批次完成提示: 当前批次所有单词都记忆完成后,会显示提示并提供按钮开始下一批。
- 语言: Kotlin
- UI: Jetpack Compose for Wear OS
- 架构: MVVM (Model-View-ViewModel)
ViewModel: 使用androidx.lifecycle.ViewModel管理 UI 状态和业务逻辑。StateFlow: 用于从 ViewModel 向 UI 公开状态。
- 数据管理:
WordRepository: 提供单词数据(当前为内存模拟,未来可扩展至数据库)。WordData Class: 包含单词信息及记忆状态字段 (isLearned,nextReviewDate,phrases等)。
- 音频: Android
MediaPlayer - 省电优化:
- 完整支持 Wear OS 微光模式,使用
AmbientLifecycleObserver实现。 - 智能资源管理,在微光模式下禁用不必要的元素和操作。
- 完整支持 Wear OS 微光模式,使用
- 构建: Gradle with Kotlin DSL (
build.gradle.kts)
- 克隆仓库:
git clone <repository-url> cd vocabulary
- 打开项目: 使用 Android Studio 打开项目根目录 (
vocabulary)。 - 同步 Gradle: 等待 Android Studio 完成 Gradle 同步。
- 准备音频文件:
- 确保
app/src/main/res/raw/目录下有对应的 MP3 音频文件。 - 文件名必须符合 Android 资源命名规范(小写字母、数字、下划线),且不能是 Java/Kotlin 关键字(例如
break不行)。 - 脚本
ttt.ps1(或类似名称的脚本) 可用于批量重命名文件并添加word_前缀。 - 在
app/src/main/java/com/example/vocabulary/data/WordRepository.kt中将单词与正确的R.raw.word_...ID 关联起来。
- 确保
- 运行应用:
- 选择一个 Wear OS 模拟器或连接一个 Wear OS 设备。
- 点击 Android Studio 工具栏中的运行按钮 (▶)。
- 应用启动后会加载第一个学习批次,显示单词主界面。
- 界面中央显示当前单词、音标、记忆等级指示器和释义(可能隐藏)。
- 操作:
- 主界面左滑: 将当前单词记忆度 +1,然后导航到下一个未完成的单词。
- 主界面右滑: 导航到列表中的前一个单词(不跳过已完成的),然后将这个刚显示的单词记忆度 -1(如果大于 0)。
- 主界面上滑: 查看当前单词的词根词缀信息。
- 主界面下滑: 查看当前单词的例句。
- 例句界面左右滑动: 切换不同的例句。
- 词根界面左滑: 查看当前单词的常见词组及释义。
- 词组界面右滑: 返回词根界面。
- 从例句/词根/词组界面上滑或下滑: 返回单词主界面。
- 点击绿色对勾按钮 (✓): 将当前单词记忆度 +1,然后导航到下一个未完成的单词。
- 点击红色叉号按钮 (✗): 将当前单词记忆度清零,并停留在当前单词。
- 点击音量图标: 播放单词发音(如果提供了音频文件)。
- 当批次内所有单词记忆度都达到 4 时,会显示"批次完成"信息。
- 点击"开始下一批"按钮,应用将加载包含复习词和新词的新批次。
- 微光模式:
- 当手表进入微光模式(屏幕变暗)时,应用将自动切换到省电界面。
- 此模式下只显示当前学习的单词和音标,使用灰色文字和黑色背景。
- 微光模式下禁用交互和音频播放,以最大限度节省电量。
- 当手表恢复活跃状态时,应用将自动返回全功能界面。
.
├── app/ # 主应用模块
│ ├── build.gradle.kts # 应用模块 Gradle 构建脚本
│ ├── src/main/
│ │ ├── java/com/example/vocabulary/
│ │ │ ├── data/ # 数据层 (例如 WordRepository)
│ │ │ ├── domain/ # 领域层 (例如 Word 模型)
│ │ │ └── presentation/ # 表示层 (Activity, Composables, ViewModel, Theme)
│ │ └── res/ # 资源文件 (音频、图标等)
│ └── ...
├── gradle/ # Gradle Wrapper 和版本目录
│ └── libs.versions.toml # 依赖库版本管理
├── build.gradle.kts # 项目级 Gradle 构建脚本
├── settings.gradle.kts # 项目设置和模块包含
└── README.md # 本文件
- 微光模式优化:
- 使用黑色背景和灰色文本,降低OLED屏幕能耗。
- 自动禁用动画、交互和音频播放。
- 简化界面,只保留最必要的信息。
- Composable重组优化:
- 使用key参数避免不必要的重组。
- 在微光模式切换时智能管理资源释放。
- 仅在必要时播放音频和更新UI。
欢迎提出问题 (Issues) 或提交合并请求 (Pull Requests)。
(可以根据需要添加许可证信息,例如 MIT License)