|
|
# 小米便签应用 (Xiaomi Note)
|
|
|
|
|
|
[](https://kotlinlang.org)
|
|
|
[](https://developer.android.com/jetpack/compose)
|
|
|
[](https://developer.android.com/training/data-storage/room)
|
|
|
[](LICENSE)
|
|
|
|
|
|
一款基于现代 Android 技术栈开发的简洁高效的便签应用,采用 MVVM 架构,支持便签的创建、编辑、删除和查看功能。
|
|
|
|
|
|
---
|
|
|
|
|
|
## 📱 应用截图
|
|
|
|
|
|
*(此处可添加应用截图)*
|
|
|
|
|
|
---
|
|
|
|
|
|
## ✨ 功能特性
|
|
|
|
|
|
### 核心功能
|
|
|
|
|
|
- ✅ **便签列表** - 按更新时间倒序显示所有便签
|
|
|
- ✅ **创建便签** - 快速创建新的便签
|
|
|
- ✅ **编辑便签** - 修改现有便签内容
|
|
|
- ✅ **删除便签** - 删除不需要的便签
|
|
|
- ✅ **数据持久化** - 使用 Room 数据库本地存储
|
|
|
- ✅ **响应式更新** - 数据变化自动刷新 UI
|
|
|
|
|
|
### 用户体验
|
|
|
|
|
|
- 🎨 Material Design 3 设计风格
|
|
|
- 🌙 支持亮色和暗色主题
|
|
|
- ⚡ 流畅的动画和过渡效果
|
|
|
- 📱 适配不同屏幕尺寸
|
|
|
- 🚀 快速启动和响应
|
|
|
|
|
|
---
|
|
|
|
|
|
## 🛠️ 技术栈
|
|
|
|
|
|
### 核心技术
|
|
|
|
|
|
| 技术 | 版本 | 用途 |
|
|
|
|------|------|------|
|
|
|
| [Kotlin](https://kotlinlang.org/) | 2.0.21 | 主要编程语言 |
|
|
|
| [Jetpack Compose](https://developer.android.com/jetpack/compose) | 2025.01.00 | 现代化 UI 框架 |
|
|
|
| [Room](https://developer.android.com/training/data-storage/room) | 2.6.1 | 数据库持久化 |
|
|
|
| [ViewModel](https://developer.android.com/topic/libraries/architecture/viewmodel) | 2.8.7 | 状态管理 |
|
|
|
| [Navigation Compose](https://developer.android.com/jetpack/compose/navigation) | 2.8.5 | 页面导航 |
|
|
|
| [Coroutines](https://kotlinlang.org/docs/coroutines-overview.html) | 内置 | 异步处理 |
|
|
|
| [Flow](https://kotlinlang.org/docs/flow.html) | 内置 | 响应式数据流 |
|
|
|
|
|
|
### 架构模式
|
|
|
|
|
|
- **MVVM** (Model-View-ViewModel)
|
|
|
- **Repository Pattern**
|
|
|
- **单例模式**
|
|
|
- **观察者模式**
|
|
|
|
|
|
---
|
|
|
|
|
|
## 📐 架构设计
|
|
|
|
|
|
```
|
|
|
┌─────────────────────────────────────┐
|
|
|
│ View Layer (UI) │
|
|
|
│ - NoteListScreen │
|
|
|
│ - NoteEditorScreen │
|
|
|
│ - NoteItem │
|
|
|
└──────────────┬──────────────────────┘
|
|
|
│ 观察 StateFlow
|
|
|
┌──────────────▼──────────────────────┐
|
|
|
│ ViewModel Layer │
|
|
|
│ - NoteViewModel │
|
|
|
│ - 业务逻辑 + 状态管理 │
|
|
|
└──────────────┬──────────────────────┘
|
|
|
│ 调用
|
|
|
┌──────────────▼──────────────────────┐
|
|
|
│ Model Layer (Data) │
|
|
|
│ - NoteRepository │
|
|
|
│ - NoteDao │
|
|
|
│ - NoteDatabase │
|
|
|
│ - Note (Entity) │
|
|
|
└─────────────────────────────────────┘
|
|
|
```
|
|
|
|
|
|
### 架构优势
|
|
|
|
|
|
- 🎯 **关注点分离** - 每层职责明确
|
|
|
- 🧪 **可测试性** - ViewModel 和 Repository 可独立测试
|
|
|
- 🔧 **可维护性** - 清晰的分层便于维护
|
|
|
- 🔄 **响应式** - 数据变化自动更新 UI
|
|
|
|
|
|
---
|
|
|
|
|
|
## 📂 项目结构
|
|
|
|
|
|
```
|
|
|
app/src/main/java/com/example/myapplication/
|
|
|
├── MainActivity.kt # 主活动,应用入口
|
|
|
├── data/
|
|
|
│ ├── Note.kt # 便签数据实体
|
|
|
│ ├── NoteDao.kt # 数据访问对象
|
|
|
│ ├── NoteDatabase.kt # Room 数据库
|
|
|
│ └── NoteRepository.kt # 数据仓库
|
|
|
├── ui/
|
|
|
│ ├── NoteListScreen.kt # 便签列表页面
|
|
|
│ ├── NoteEditorScreen.kt # 便签编辑页面
|
|
|
│ ├── NoteItem.kt # 便签列表项组件
|
|
|
│ └── theme/
|
|
|
│ ├── Color.kt # 颜色定义
|
|
|
│ ├── Theme.kt # 主题配置
|
|
|
│ └── Type.kt # 字体排版
|
|
|
└── viewmodel/
|
|
|
└── NoteViewModel.kt # 便签 ViewModel
|
|
|
|
|
|
doc/
|
|
|
├── 泛读报告.md # 开源代码泛读报告
|
|
|
├── 用例图.md # UML 用例图
|
|
|
├── 类图.md # UML 类图
|
|
|
├── 维护设计方案文档.md # 维护设计方案
|
|
|
└── PPT演示内容.md # PPT 演示内容
|
|
|
```
|
|
|
|
|
|
---
|
|
|
|
|
|
## 🚀 快速开始
|
|
|
|
|
|
### 环境要求
|
|
|
|
|
|
- Android Studio Hedgehog 或更高版本
|
|
|
- JDK 11 或更高版本
|
|
|
- Android SDK 24+ (Android 7.0)
|
|
|
- Kotlin 2.0.21
|
|
|
|
|
|
### 运行项目
|
|
|
|
|
|
1. **克隆项目**
|
|
|
```bash
|
|
|
git clone <repository-url>
|
|
|
cd My
|
|
|
```
|
|
|
|
|
|
2. **打开项目**
|
|
|
- 在 Android Studio 中打开项目
|
|
|
- 等待 Gradle 同步完成
|
|
|
|
|
|
3. **运行应用**
|
|
|
- 连接 Android 设备或启动模拟器
|
|
|
- 点击 Run 按钮 (▶️)
|
|
|
- 应用将自动安装并启动
|
|
|
|
|
|
### 构建 APK
|
|
|
|
|
|
```bash
|
|
|
./gradlew assembleDebug
|
|
|
```
|
|
|
|
|
|
生成的 APK 文件位于: `app/build/outputs/apk/debug/`
|
|
|
|
|
|
---
|
|
|
|
|
|
## 📖 使用指南
|
|
|
|
|
|
### 创建便签
|
|
|
|
|
|
1. 打开应用,进入便签列表页面
|
|
|
2. 点击右下角的浮动操作按钮 (+)
|
|
|
3. 输入便签标题和内容
|
|
|
4. 点击保存按钮 (✓)
|
|
|
5. 自动返回列首页面
|
|
|
|
|
|
### 编辑便签
|
|
|
|
|
|
1. 在列表中点击要编辑的便签卡片
|
|
|
2. 修改标题或内容
|
|
|
3. 点击保存按钮
|
|
|
4. 更改自动保存并返回列表
|
|
|
|
|
|
### 删除便签
|
|
|
|
|
|
1. 找到要删除的便签
|
|
|
2. 点击便签卡片右上角的删除图标 (🗑️)
|
|
|
3. 便签立即从列表中删除
|
|
|
|
|
|
### 查看便签
|
|
|
|
|
|
- 便签按更新时间倒序排列
|
|
|
- 最新的便签显示在列表顶部
|
|
|
- 每个便签显示标题、内容预览和更新时间
|
|
|
|
|
|
---
|
|
|
|
|
|
## 🎨 界面展示
|
|
|
|
|
|
### 亮色主题
|
|
|
|
|
|
- 主色调: 小米橙 (#FFFF6900)
|
|
|
- 背景色: 浅灰 (#FFF5F5F5)
|
|
|
- 卡片色: 白色 (#FFFFFFFF)
|
|
|
|
|
|
### 暗色主题
|
|
|
|
|
|
- 主色调: 深橙 (#FFFF8534)
|
|
|
- 背景色: 深灰 (#FF1A1A1A)
|
|
|
- 卡片色: 中灰 (#FF2D2D2D)
|
|
|
|
|
|
---
|
|
|
|
|
|
## 📊 代码统计
|
|
|
|
|
|
### 源代码
|
|
|
|
|
|
- **总文件数**: 12 个 Kotlin 文件
|
|
|
- **代码行数**: ~800 行(不含注释)
|
|
|
- **注释覆盖率**: 95%+
|
|
|
- **包数量**: 4 个 (data, ui, viewmodel, theme)
|
|
|
|
|
|
### 文档
|
|
|
|
|
|
- **泛读报告**: 404 行
|
|
|
- **用例图**: 303 行
|
|
|
- **类图**: 678 行
|
|
|
- **维护设计方案**: 707 行
|
|
|
- **PPT 演示内容**: 733 行
|
|
|
- **文档总计**: ~2,825 行
|
|
|
|
|
|
---
|
|
|
|
|
|
## 🔍 技术亮点
|
|
|
|
|
|
### 1. 响应式编程
|
|
|
|
|
|
使用 Flow 实现数据流的响应式更新:
|
|
|
|
|
|
```kotlin
|
|
|
// DAO 层
|
|
|
@Query("SELECT * FROM notes ORDER BY updateTime DESC")
|
|
|
fun getAllNotes(): Flow<List<Note>>
|
|
|
|
|
|
// ViewModel 层
|
|
|
viewModelScope.launch {
|
|
|
repository.getAllNotes().collect { notes ->
|
|
|
_allNotes.value = notes
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// UI 层
|
|
|
val notes by viewModel.allNotes.collectAsState()
|
|
|
```
|
|
|
|
|
|
### 2. 声明式 UI
|
|
|
|
|
|
使用 Jetpack Compose 构建现代化界面:
|
|
|
|
|
|
```kotlin
|
|
|
@Composable
|
|
|
fun NoteItem(note: Note, onClick: () -> Unit) {
|
|
|
Card(
|
|
|
modifier = Modifier.clickable { onClick() }
|
|
|
) {
|
|
|
Column {
|
|
|
Text(note.title)
|
|
|
Text(note.content)
|
|
|
Text(formatTime(note.updateTime))
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
|
|
|
### 3. 数据库持久化
|
|
|
|
|
|
使用 Room 实现类型安全的数据库操作:
|
|
|
|
|
|
```kotlin
|
|
|
@Entity(tableName = "notes")
|
|
|
data class Note(
|
|
|
@PrimaryKey(autoGenerate = true)
|
|
|
val id: Int = 0,
|
|
|
val title: String = "",
|
|
|
val content: String = "",
|
|
|
val createTime: Long = System.currentTimeMillis(),
|
|
|
val updateTime: Long = System.currentTimeMillis()
|
|
|
)
|
|
|
```
|
|
|
|
|
|
---
|
|
|
|
|
|
## 📚 学习资源
|
|
|
|
|
|
### 官方文档
|
|
|
|
|
|
- [Kotlin 官方文档](https://kotlinlang.org/docs/home.html)
|
|
|
- [Jetpack Compose 教程](https://developer.android.com/jetpack/compose/tutorial)
|
|
|
- [Room 持久化库](https://developer.android.com/training/data-storage/room)
|
|
|
- [ViewModel 概览](https://developer.android.com/topic/libraries/architecture/viewmodel)
|
|
|
- [Navigation Compose](https://developer.android.com/jetpack/compose/navigation)
|
|
|
|
|
|
### 推荐学习路径
|
|
|
|
|
|
1. 学习 Kotlin 基础语法
|
|
|
2. 掌握 Coroutines 和 Flow
|
|
|
3. 学习 Jetpack Compose
|
|
|
4. 理解 MVVM 架构
|
|
|
5. 实践 Room 数据库
|
|
|
6. 完成本项目
|
|
|
|
|
|
---
|
|
|
|
|
|
## 🔧 可扩展功能
|
|
|
|
|
|
本项目架构清晰,易于扩展。以下是一些可以添加的功能:
|
|
|
|
|
|
### 短期计划
|
|
|
|
|
|
- [ ] 搜索功能 - 全文搜索便签
|
|
|
- [ ] 分类标签 - 便签分类管理
|
|
|
- [ ] 数据导出 - 导出为文本文件
|
|
|
- [ ] 分享功能 - 分享便签到其他应用
|
|
|
|
|
|
### 长期计划
|
|
|
|
|
|
- [ ] 云同步 - 多设备数据同步
|
|
|
- [ ] 富文本编辑 - 支持格式化文本
|
|
|
- [ ] 图片附件 - 添加图片到便签
|
|
|
- [ ] 提醒功能 - 定时提醒
|
|
|
- [ ] 数据备份 - 云端备份和恢复
|
|
|
|
|
|
---
|
|
|
|
|
|
## 🧪 测试
|
|
|
|
|
|
### 运行测试
|
|
|
|
|
|
```bash
|
|
|
# 运行单元测试
|
|
|
./gradlew test
|
|
|
|
|
|
# 运行仪器测试
|
|
|
./gradlew connectedAndroidTest
|
|
|
```
|
|
|
|
|
|
### 测试覆盖
|
|
|
|
|
|
- 单元测试: ViewModel 和 Repository
|
|
|
- UI 测试: Compose 组件
|
|
|
- 集成测试: 数据库操作
|
|
|
|
|
|
---
|
|
|
|
|
|
## 📝 代码规范
|
|
|
|
|
|
### Kotlin 编码规范
|
|
|
|
|
|
- 遵循 [Kotlin 官方编码规范](https://kotlinlang.org/docs/coding-conventions.html)
|
|
|
- 使用 4 个空格缩进
|
|
|
- 类名使用 PascalCase
|
|
|
- 函数和变量使用 camelCase
|
|
|
- 常量使用 UPPER_SNAKE_CASE
|
|
|
|
|
|
### 注释规范
|
|
|
|
|
|
- 所有公共 API 都必须有 KDoc 注释
|
|
|
- 包含类说明、函数说明、参数说明
|
|
|
- 复杂逻辑添加行内注释
|
|
|
- 使用中文注释
|
|
|
|
|
|
### Git 提交规范
|
|
|
|
|
|
```
|
|
|
feat: 添加新功能
|
|
|
fix: 修复 bug
|
|
|
docs: 更新文档
|
|
|
style: 代码格式调整
|
|
|
refactor: 重构代码
|
|
|
test: 添加测试
|
|
|
chore: 构建过程或辅助工具的变动
|
|
|
```
|
|
|
|
|
|
---
|
|
|
|
|
|
## 🤝 贡献指南
|
|
|
|
|
|
欢迎提交 Issue 和 Pull Request!
|
|
|
|
|
|
### 提交 Issue
|
|
|
|
|
|
- 描述清楚问题
|
|
|
- 提供复现步骤
|
|
|
- 附上截图或日志
|
|
|
|
|
|
### 提交 PR
|
|
|
|
|
|
1. Fork 本仓库
|
|
|
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
|
|
|
3. 提交更改 (`git commit -m 'feat: add some amazing feature'`)
|
|
|
4. 推送到分支 (`git push origin feature/AmazingFeature`)
|
|
|
5. 提交 Pull Request
|
|
|
|
|
|
---
|
|
|
|
|
|
## 📄 许可证
|
|
|
|
|
|
本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。
|
|
|
|
|
|
---
|
|
|
|
|
|
## 👨💻 作者
|
|
|
|
|
|
**项目名称**: 小米便签应用
|
|
|
**完成日期**: 2026年4月24日
|
|
|
**开发工具**: Android Studio
|
|
|
**编程语言**: Kotlin
|
|
|
|
|
|
---
|
|
|
|
|
|
## 🙏 致谢
|
|
|
|
|
|
感谢以下开源项目:
|
|
|
|
|
|
- [Jetpack Compose](https://developer.android.com/jetpack/compose)
|
|
|
- [Room Persistence Library](https://developer.android.com/training/data-storage/room)
|
|
|
- [Material Design](https://material.io/)
|
|
|
- [Kotlin Coroutines](https://kotlinlang.org/docs/coroutines-overview.html)
|
|
|
|
|
|
---
|
|
|
|
|
|
## 📞 联系方式
|
|
|
|
|
|
如有问题或建议,欢迎联系:
|
|
|
|
|
|
- 📧 Email: example@email.com
|
|
|
- 💬 Issues: [提交 Issue](https://github.com/your-repo/issues)
|
|
|
|
|
|
---
|
|
|
|
|
|
## ⭐ 展示支持
|
|
|
|
|
|
如果这个项目对你有帮助,请给个 ⭐️ 支持一下!
|
|
|
|
|
|
---
|
|
|
|
|
|
**最后更新**: 2026年4月24日
|
|
|
**版本**: v1.0.0
|
|
|
**状态**: ✅ 已完成
|