ExamKeyIME 是一款专为高效信息检索和输入设计的 Android 自定义输入法。它结合了强大的离线搜题功能和便捷的剪贴板管理,旨在成为您学习和工作中的得力助手。
- 多题型支持:支持单选题、多选题、判断题等多种题型。
- 智能搜索:输入超过四个字符的关键词即可触发智能搜索。
- 模糊匹配:采用先进的字符串模糊匹配算法,显著提升搜索结果的准确率。
- 即时弹窗:搜索结果以悬浮弹窗形式即时呈现,4秒后自动消失,不打断工作流程。
- 一键粘贴:在搜索结果中,轻点答案所在行,即可将其直接粘贴至当前输入框。
- 历史记录:自动保存最近500条复制内容,方便随时查阅和使用。
- 智能队列管理:采用FIFO(先进先出)队列自动管理存储空间,确保剪贴板高效运行。
- 时间戳标记:每条记录都附带精确到秒的保存时间,便于追溯。
- 内容预览:列表中的每条记录都会显示前20个字符作为预览。
- 重复内容过滤:智能识别并过滤重复的剪贴板内容,保持列表的清爽与整洁。
- 26键全键盘:提供标准QWERTY布局,完美支持中英文输入。
- 九宫格T9输入:经典的九宫格输入方式,为单手操作提供便利。
- 专用符号键盘:内置丰富的常用及特殊符号,满足多样化的输入需求。
- 数字键盘:独立的数字输入界面,包含常用数学运算符。
- 快捷模式切换:通过长按空格键,可以快速在中文和英文输入模式间切换。
-
安装应用
- 通过 Android Studio 运行项目,或直接安装生成的
app-debug.apk文件到您的 Android 设备上。
- 通过 Android Studio 运行项目,或直接安装生成的
-
启用输入法
- 打开设备的 设置。
- 进入 系统 > 语言和输入法 (或类似路径,不同厂商系统路径可能略有差异)。
- 点击 屏幕键盘 (或 虚拟键盘)。
- 选择 管理屏幕键盘。
- 在列表中找到 ExamKeyIME 并打开右侧的开关。系统可能会提示安全风险,请点击"确定"继续。
-
切换输入法
- 打开任意一个文本输入框(如短信、搜索栏等)。
- 键盘弹出后,您会看到屏幕右下角出现一个键盘图标,或者在通知栏中看到"选择输入法"的提示。
- 点击该图标或提示,在弹出的列表中选择 ExamKeyIME。
现在,您应该能看到 ExamKeyIME 的键盘界面了,开始享受高效的输入体验吧!
app/src/main/java/com/example/examkeyime/
├── ime/ # 输入法核心模块
│ ├── ExamKeyIME.kt # 主输入法服务
│ ├── ExamKeyIME_UI.kt # 键盘UI及状态管理
├── data/ # 数据层
│ ├── QuestionRepository.kt # 题库仓库,负责加载和解析
│ └── ClipboardStore.kt # 剪贴板存储
├── model/ # 数据模型
│ ├── Question.kt # 题目数据类
│ ├── KeyboardMode.kt # 键盘模式枚举
│ └── Search.kt # 搜索相关数据类
├── pinyin/ # 拼音处理
│ └── PinyinEngine.kt # 拼音转换引擎
└── util/ # 工具类
├── PinyinUtils.kt # 拼音处理工具
└── StringFuzzy.kt # 模糊搜索算法
| 类别 | 技术/库 | 版本 | 描述 |
|---|---|---|---|
| 核心 | Kotlin | 1.9.0+ | 项目主要开发语言 |
| Android Core KTX | 1.13.1 | 提供Kotlin对Android核心API的扩展 | |
| Android Appcompat | 1.6.1 | 兼容旧版Android的UI组件库 | |
| Android Lifecycle KTX | 2.8.1 | 为生命周期管理提供协程支持 | |
| UI | Jetpack Compose | - | 用于构建现代化、声明式UI |
| Material Design | 1.12.0 | Google的UI设计语言实现 | |
| ConstraintLayout | 2.1.4 | 强大的布局管理器 | |
| 异步处理 | Kotlin Coroutines | 1.7.3 | 用于管理后台任务和异步操作 |
| 数据处理 | Gson | 2.10.1 | 用于JSON数据的序列化和反序列化 |
| Pinyin4j | 2.5.1 | 用于将汉字转换为拼音 | |
| 测试 | JUnit | 4.13.2 | Java单元测试框架 |
| AndroidX Test Ext | 1.1.5 | AndroidX测试库扩展 | |
| Espresso | 3.5.1 | 用于UI自动化测试 |
- MVVM (Model-View-ViewModel): 采用此模式分离业务逻辑与UI,使代码更清晰、易于维护。
- Repository模式: 创建数据仓库层,统一管理数据来源(本地文件、网络等)。
- State-driven UI: UI状态由数据驱动,确保界面与数据的一致性。
题库文件位于 app/src/main/assets/timushuju/ 目录,支持以下Markdown格式:
1、题干内容
A、选项一
B、选项二
C、选项三
D、选项四
答案C1、题干内容
A、选项一
B、选项二
C、选项三
D、选项四
答案ABC1、题干内容
答案:是- Android Studio: Hedgehog | 2023.1.1 或更高版本
- Kotlin: 1.9.0 或更高版本
- Android SDK: API 34+
- Gradle: 8.0+
- Java: JDK 1.8
# 克隆项目
git clone https://github.com/YPYT1/ExamKeyIME.git
cd ExamKeyIME
# 构建Debug版本 (用于开发和测试)
./gradlew assembleDebug
# 安装到连接的设备或模拟器
./gradlew installDebug
# 构建Release版本 (用于发布)
./gradlew assembleRelease- 将您的题库文件(.md格式)放入
app/src/main/assets/timushuju/目录。 - 文件名必须为
单选题.md、多选题.md或判断题.md。 - 重新构建项目,题库将自动被打包进应用。
项目包含一系列自动化测试,覆盖核心功能:
- 模式切换: 验证键盘在
普通->搜索->剪贴板模式间的状态转换是否正确。 - 搜索功能:
- 输入测试关键词,如 "马克思主义理论区别于其他理论的根本特征"。
- 验证弹窗是否正确显示题干和答案 "C、实践性"。
- 验证弹窗是否在4秒后自动消失。
- 验证点击答案行是否能成功将内容粘贴到输入框。
- 剪贴板功能:
- 验证剪贴板历史记录是否正确显示。
- 验证点击历史条目是否能成功粘贴内容。
- 验证FIFO队列是否在超过500条记录时正确移除最旧条目。
- 键盘核心功能:
- 验证不同键盘布局(26键、9键、符号)之间的切换是否流畅。
- 验证中英文输入模式的切换和输入结果。
- 验证大小写切换、删除、空格等特殊按键的功能。
- 题库加载时间: < 2秒
- 搜索响应时间: < 500毫秒
- 内存占用: < 50MB
- 电池消耗: 经过优化,对设备续航影响极小
本项目采用 MIT License 开源。仅供学习和研究使用,不得用于任何商业用途。
我们欢迎任何形式的贡献来改进这个项目!
- Fork 本项目。
- 创建您的功能分支 (
git checkout -b feature/YourAmazingFeature)。 - 提交您的更改 (
git commit -m 'Add some AmazingFeature')。 - 推送到您的分支 (
git push origin feature/YourAmazingFeature)。 - 开启一个 Pull Request。
- 项目地址: GitHub Repository
- 问题反馈: Issues
ExamKeyIME - 让学习更高效,让输入更智能 📚⌨️