Android期末作品

发布时间 2023-09-20 16:02:27作者: Lovi*

教程

Android安卓开发-记事本:https://www.bilibili.com/video/BV1m4411z7C8/

这里非常感谢up!

【安卓项目】Android开发的便签项目-NoteApp 案例分享:https://www.bilibili.com/video/BV1hr4y1L79P/

每集我学到的东西(记事本)

p1 就是新建了项目,还有唠嗑。

p2 学习了数据之间的跳转,转换,一点点布局的信息。数据的传输。intent的小小使用。日志的使用。

p3 实现了点击+图标就跳转到新增页面,编辑然后保存(数据库的操作)

p4 主要是学会了一个工具栏(主键)

一个是增删查改的几个操作对应mode不一样

p5 讲了一些学长的心得体会

p6 菜单栏的设定(需要在主界面引用!),讲了矢量图标的使用。讲了怎么修改主界面导航栏的图标

p7 实现了删除,有删除全部,也有删除一条,基本上都是固定写法。会用就是,也就是sqllite语法。

p8 讲了搜索,非常简单,就是加个图标,找到渲染到部分,用那个适配器弄一弄就好了。

p9 讲了左侧弹窗的做法(曲线救国了属于是) ,显示一层蒙版,然后再是弹窗出来,都是有固定写法的。
需要设置setting_layout,然后蒙版的逻辑就是,点击蒙版,蒙版消失,蒙版消失的时候触发弹窗消失

p10 讲了黑夜模式基础设置,我困了,他修改了setting,我待会还得再看一遍吃透。(又看了一遍)
懂了,user setting那个有xml也有layout,layout是prefer那个。总之呢。整体的逻辑,就是引入了新的知识点,关于全局变量。还有一个比较好的思维(复用思维),就是把基础的设置都弄到BaseActivity,里边,然后再usersetting那里,设置了嗯滑块的选中,对于是否为黑夜模式做了true和false的判断。
并且更加的定义了黑夜模式,有具体的setting,对于那个图标的改变也是做了判断,设定的。
还弄了,当选择黑夜模式之后刷新页面,重新渲染(intent)

p11 之前那看过了,没讲什么重点

p12 完全在讲黑夜模式,设定就是用到了广播,然后点击返回键的时候才发送广播,黑夜模式的设定需要在主题那里弄个style。弄成深色主题。然后就差不多了,关于needRefresh是个亮点,也就是发送广播修改之后,再按需刷新。

其他收获

如何运行老版本/非本机的android项目?

这个很重要,根据我的实践,最好的方式就是

  • 查看需要运行项目的api版本,自己新建一个同样api版本的项目
  • 查看要运行项目的依赖,老的呢就换成新的就好了,没有的就加上去好了。(有新的还是用新的)
  • 把新项目的java项目文件和res文件和目录全部删掉。然后把需要运行项目的目录和文件粘贴过来。
  • 把那些包名全部修改成自己项目的包名。
  • 把import爆红的包,还有res爆红的包,全部换成对应依赖里可以替换的名字。

直到没有报错,就ok了。

思想上

复用思想,那个BaseActivity很重要。

以及好习惯的养成。内容和代名,统一管理。

黑夜模式的使用,nightTheme。


项目二:便笺

依赖分析

image-20230605181423824

其中

  • implementation "androidx.room:room-runtime:2.4.2" annotationProcessor "androidx.room:room-compiler:2.4.2" :Room 是 Android 官方提供的一个轻量级、简单易用的 ORM(Object Relational Mapping)框架,它可以帮助我们快速地在应用程序中实现 SQLite 数据库操作。

  • implementation "androidx.recyclerview:recyclerview:1.2.1":是使用 RecyclerView 的必要依赖,RecyclerView 是 Android 系统提供的一种用于展示大量数据的 UI 控件,它可以高效地对列表进行渲染和滚动,并提供了许多扩展性的 API,可以方便地实现各种复杂的列表展示效果。

  • implementation "com.intuit.sdp:sdp-android:1.0.6"implementation "com.intuit.ssp:ssp-android:1.0.6":是用于自适应布局的依赖,提供了一种基于屏幕密度的尺寸单位,可以让我们的应用程序在不同的屏幕上具有更好的适应性和可伸缩性。

  • implementation "com.makeramen:roundedimageview:2.3.0":是用于圆角图片展示的依赖,它提供了一种方便的方法来显示圆角图片,可以用于实现各种圆角图片展示效果。

这些依赖都是在 Android 应用程序开发中比较常用的依赖,可以方便地实现各种 UI 效果和布局效果。

架构分析

image-20230605172514104

  1. CreateNoteActivity:这个文件是一个Activity,用于创建新的便签。它包含一个表单,让用户输入便签的标题和内容,并保存到数据库中。

  2. MainActivity:这个文件也是一个Activity,它是应用程序的主界面。它显示了所有保存的便签,并允许用户选择一个便签进行编辑或删除。

  3. NotesAdapter:这个文件是一个RecyclerView的适配器,用于显示便签列表。它从数据库中获取便签数据,并将其显示在RecyclerView中。

  4. NoteDao:这个文件是一个数据访问对象(DAO),用于访问数据库中的便签数据。它定义了一些方法,例如插入、更新和删除数据的方法。

  5. NoteDatabase:这个文件是一个Room数据库,用于保存便签数据。它包含一个抽象类和一些注释,用于定义数据库的结构和操作。

  6. Note:这个文件是一个实体类,用于表示一个便签。它包含便签的标题和内容等属性。

  7. NotesListeners:这个文件包含一些接口,用于响应用户对便签的操作,例如添加、编辑和删除便签。

  • 布局文件

image-20230605173003264

这些layout文件的作用:

  1. activity_create_note.xml:这个文件是CreateNoteActivity的布局文件,它包含用于创建新便签的表单,包括标题和内容的输入框以及"Save"按钮。

  2. activity_main.xml:这个文件是MainActivity的布局文件,它包含一个RecyclerView,用于显示所有保存的便签。在RecyclerView中,每个便签以"item_container_note.xml"布局文件为基础进行显示。

  3. item_container_note.xml:这个文件是一个列表项的布局文件,它用于显示一个便签的标题和内容。在MainActivity的RecyclerView中,每个列表项都会使用该布局文件来显示便签。

  4. layout_add_url.xml:这个文件是用于添加URL的布局文件,它包含一个输入框和一个"Add"按钮,用于添加URL链接到便签内容中。

  5. layout_delete_note.xml:这个文件是用于删除便签的布局文件,它包含一个提示消息和两个按钮,一个用于确认删除,另一个用于取消删除操作。

  6. layout_miscellaneous.xml:这个文件是一个杂项的布局文件,它包含一些常用的UI元素,例如标题栏和按钮。

理解顺序

这个架构的顺序应该是这样的:

Note -> NoteDao -> NoteDatabase -> NotesListeners -> NotesAdapter -> MainActivity -> CreateNoteActivity

其中,Note 是实体类,代表一个笔记;NoteDao 是数据访问对象,负责定义对笔记的增删改查操作;NoteDatabase 是数据库,存储着所有的笔记数据;NotesListeners 是接口,定义了与笔记相关的操作,例如笔记的点击、更新和删除等;NotesAdapter 是 RecyclerView 的适配器,用于将笔记数据展示到列表中;MainActivity 是主界面,负责展示所有的笔记,并且与 NotesListeners 和 NotesAdapter 交互;CreateNoteActivity 是创建和更新笔记的界面,与 NoteDao 和 NoteDatabase 交互,实现笔记的增删改查操作。


数据库设计

以下是NotePaper中Note表格的设计:

列名 数据类型 主键 自增 允许为空 描述
id INTEGER 笔记ID
title TEXT 笔记标题
date_time TEXT 笔记创建时间
subtitle TEXT 笔记副标题
note_text TEXT 笔记文本内容
image_path TEXT 笔记图片路径
color TEXT 笔记颜色
web_link TEXT 笔记网页链接
inColor TEXT 笔记详情页背景颜色
outColor TEXT 笔记列表页背景颜色

该表格中的每一行代表了一个笔记,每一列则代表了笔记的一个属性。其中,id列是主键,使用auto increment来自动生成主键值;其余列均允许为空,可以根据用户的实际需求进行填写。例如,如果用户不需要为笔记设置副标题,则可以在该列中填写空值。

还未解决的问题...(以后再说咯..)

image-20230606153651232