目录
一、测试环境说明
电脑环境
Windows 11
编写语言
JAVA
开发软件
Android Studio (2020)
开发软件只要大于等于测试版本即可(近几年官网直接下载也可以),若是版本低于测试版本请自行测试。项目需要根据你的软件自行适配
二、项目简介
该项目简介来自网络,具体内容需要自行测试
麻雀笔记是一款基于Android平台的轻量级笔记应用,采用Java语言开发,使用Android Studio作为开发工具。该应用通过简洁直观的界面设计,帮助用户高效管理碎片化信息,支持便签、链接、位置等多种内容类型。
应用采用了ButterKnife、SQLite+OrmLite、Glide等主流技术框架,实现了视图绑定、数据存储和图片加载等功能。核心功能包括笔记的增删改查、分类管理、置顶操作,以及用户登录注册和个人信息管理。
系统架构上结合了Fragment+ViewPager实现多页面切换,使用DrawerLayout+NavigationView构建侧滑菜单,并通过RecyclerView和SwipeRefreshLayout实现流畅的列表展示和下拉刷新。这些技术选择既保证了功能完整性,又提升了用户体验。
安全方面实现了用户认证、密码加密存储和自动登录等功能,通过SharedPreferences进行本地数据持久化。界面设计遵循Material Design规范,采用TextInputLayout、Toolbar等现代化控件,使交互更加自然友好。
该应用特别适合快节奏生活中的信息管理需求,通过置顶功能和分类体系帮助用户区分优先级,内置的日期计算等实用工具进一步提升了使用效率。整体设计体现了"麻雀虽小,五脏俱全"的开发理念。该项目由编程乐学团队介入,优化布局完善功能
三、项目演示
网络资源模板--基于Android studio 麻雀笔记App
四、部设计详情(部分)
添加页面
1. 页面的结构
该页面采用双层ConstraintLayout嵌套结构,上层为固定高度的ViewPager显示区域,下层为功能操作区。操作区采用网格布局,包含8个功能图标及其对应文字标签,底部设有重置和保存按钮。
整体采用水平垂直Guideline进行比例分割,确保各元素在不同屏幕尺寸下保持相对位置。功能图标按2行4列矩阵排列,每个图标下方配有彩色文字说明,形成清晰的视觉分区。
背景使用统一色调,通过颜色对比突出可操作元素。
2. 使用到的技术
页面基于AndroidX组件库开发,核心采用ConstraintLayout实现复杂响应式布局,结合Guideline进行百分比定位。
使用自定义NoScrollViewPager实现多类型输入界面的滑动切换,配合ButterKnife进行视图绑定。数据层通过NoteDao操作SQLite数据库,采用SharedPreferenceUtil管理用户偏好。
日期处理使用SimpleDateFormat转换时间格式,并实现日期差计算算法。页面通过动态加载不同布局文件实现多类型输入模板,运用资源索引映射对应图标。
3. 页面详细介绍
这是便签应用的添加功能页,支持8种数据类型录入。顶部区域动态显示不同输入模板,包括便签、链接、位置等表单。
底部导航区通过图标切换输入类型,每种类型对应不同表单结构和图标颜色。保存时自动记录用户ID和创建时间,对日期类数据会智能计算天数差。
采用所见即所得设计,重置按钮可清空当前表单。数据存储时自动关联类型图标,通过封装方法统一处理不同表单的数据提取和清空操作,保证业务逻辑与界面解耦。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background"
tools:context=".fragment.AddFragment">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/constraintLayout"
android:layout_width="0dp"
android:layout_height="200dp"
android:background="@color/background"
app:layout_constraintBottom_toTopOf="@+id/guideline29"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.example.sparrownotes.util.NoScrollViewPager
android:id="@+id/view_pager_add"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="@color/background"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/constraintLayout4"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="@color/dock"
android:paddingBottom="5dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/guideline29"
app:layout_constraintVertical_bias="1.0">
<TextView
android:id="@+id/text_reset"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/reset"
android:textColor="@color/grey"
android:textSize="20sp"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@+id/guideline24"
app:layout_constraintEnd_toStartOf="@+id/guideline18"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/text_save"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/save"
android:textColor="@color/colorPrimaryDark"
android:textSize="20sp"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@+id/guideline24"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/guideline23"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/img_account"
android:layout_width="0dp"
android:layout_height="0dp"
android:src="@drawable/cate_account"
app:layout_constraintBottom_toTopOf="@+id/guideline27"
app:layout_constraintEnd_toStartOf="@+id/guideline23"
app:layout_constraintStart_toStartOf="@+id/guideline19"
app:layout_constraintTop_toTopOf="@+id/guideline28" />
<ImageView
android:id="@+id/img_date"
android:layout_width="0dp"
android:layout_height="0dp"
android:src="@drawable/cate_date"
app:layout_constraintBottom_toTopOf="@+id/guideline27"
app:layout_constraintEnd_toStartOf="@+id/guideline18"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/guideline28"
app:layout_constraintVertical_bias="1.0" />
<TextView
android:id="@+id/text_note"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/note"
android:textColor="@color/colorAccent"
android:textSize="@dimen/cate_text_size"
app:layout_constraintBottom_toTopOf="@+id/guideline25"
app:layout_constraintEnd_toStartOf="@+id/guideline18"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/guideline26" />
<TextView
android:id="@+id/text_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/date"
android:textColor="@color/colorAccent"
android:textSize="@dimen/cate_text_size"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/guideline18"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/guideline27" />
<TextView
android:id="@+id/text_link"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/link"
android:textColor="@color/colorAccent"
android:textSize="@dimen/cate_text_size"
app:layout_constraintBottom_toTopOf="@+id/guideline25"
app:layout_constraintEnd_toStartOf="@+id/guideline19"
app:layout_constraintStart_toStartOf="@+id/guideline18"
app:layout_constraintTop_toTopOf="@+id/guideline26" />
<TextView
android:id="@+id/text_location"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/location"
android:textColor="@color/colorAccent"
android:textSize="@dimen/cate_text_size"
app:layout_constraintBottom_toTopOf="@+id/guideline25"
app:layout_constraintEnd_toStartOf="@+id/guideline23"
app:layout_constraintStart_toStartOf="@+id/guideline19"
app:layout_constraintTop_toTopOf="@+id/guideline26" />
<TextView
android:id="@+id/text_mood"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/mood"
android:textColor="@color/colorAccent"
android:textSize="@dimen/cate_text_size"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/guideline19"
app:layout_constraintStart_toStartOf="@+id/guideline18"
app:layout_constraintTop_toTopOf="@+id/guideline27" />
<TextView
android:id="@+id/text_account"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/account"
android:textColor="@color/colorAccent"
android:textSize="@dimen/cate_text_size"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/guideline23"
app:layout_constraintStart_toStartOf="@+id/guideline19"
app:layout_constraintTop_toBottomOf="@+id/img_account" />
<TextView
android:id="@+id/text_question"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/question"
android:textColor="@color/colorAccent"
android:textSize="@dimen/cate_text_size"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/guideline23"
app:layout_constraintTop_toTopOf="@+id/guideline27" />
<TextView
android:id="@+id/text_bill"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/bill"
android:textColor="@color/colorAccent"
android:textSize="@dimen/cate_text_size"
app:layout_constraintBottom_toTopOf="@+id/guideline25"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/guideline23"
app:layout_constraintTop_toTopOf="@+id/guideline26" />
<ImageView
android:id="@+id/img_link"
android:layout_width="0dp"
android:layout_height="0dp"
android:src="@drawable/cate_link"
app:layout_constraintBottom_toTopOf="@+id/guideline26"
app:layout_constraintEnd_toStartOf="@+id/guideline19"
app:layout_constraintStart_toStartOf="@+id/guideline18"
app:layout_constraintTop_toTopOf="@+id/guideline24" />
<ImageView
android:id="@+id/img_bill"
android:layout_width="0dp"
android:layout_height="0dp"
android:src="@drawable/cate_bill"
app:layout_constraintBottom_toTopOf="@+id/guideline26"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/guideline23"
app:layout_constraintTop_toTopOf="@+id/guideline24" />
<ImageView
android:id="@+id/img_location"
android:layout_width="0dp"
android:layout_height="0dp"
android:src="@drawable/cate_location"
app:layout_constraintBottom_toTopOf="@+id/guideline26"
app:layout_constraintEnd_toStartOf="@+id/guideline23"
app:layout_constraintStart_toStartOf="@+id/guideline19"
app:layout_constraintTop_toTopOf="@+id/guideline24" />
<ImageView
android:id="@+id/img_mood"
android:layout_width="0dp"
android:layout_height="0dp"
android:src="@drawable/cate_mood"
app:layout_constraintBottom_toTopOf="@+id/guideline27"
app:layout_constraintEnd_toStartOf="@+id/guideline19"
app:layout_constraintStart_toStartOf="@+id/guideline18"
app:layout_constraintTop_toTopOf="@+id/guideline28" />
<ImageView
android:id="@+id/img_note"
android:layout_width="0dp"
android:layout_height="0dp"
android:src="@drawable/cate_note"
app:layout_constraintBottom_toTopOf="@+id/guideline26"
app:layout_constraintEnd_toStartOf="@+id/guideline18"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/guideline24" />
<ImageView
android:id="@+id/img_question"
android:layout_width="0dp"
android:layout_height="0dp"
android:src="@drawable/cate_question"
app:layout_constraintBottom_toTopOf="@+id/guideline27"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/guideline23"
app:layout_constraintTop_toTopOf="@+id/guideline28" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline18"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.25" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline24"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.25" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline26"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.425" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline27"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.85" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline19"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.5" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline23"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.75" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline25"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.575" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline28"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.675" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline29"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.55" />
</androidx.constraintlayout.widget.ConstraintLayout>
五、项目源码
👇👇👇👇👇快捷方式👇👇👇👇👇