Android Studio实现课表

        本文章主要展示课表的实现,里面包含很多控件的用法,比如吐司Toast、通知Notification、ListView,数值选择器NumberPicker,SeekBar同editText的关联。抽屉导航栏

        还有一些其他的功能,比如InputFilter自定义的字符过滤器,SharedPreferences保存数据,自定义对话框,日期计算等

  • 实验数据及结果分析:
  1. 主要思路:

(一)、需求分析:

   因为课表保存在图库之中,每次打开查找十分麻烦,并且课程有上课周之分,需仔细辨别。不同用户课程不同,可能会出现突然加课,需要能够修改课程,不同地区,学校的上课时间也可能有细微不同,用户需要自定义每日上课节数。为了更好的体验,还可能需要自定义文字大小等参数。或者打开app直接告诉我今天上什么课程。

(二)、功能分析:

根据需求,我们需要通过用户录入的课程,结合开学时间和今日时间显示本周课程,同时支持切换周查看下周课程,录入课程时需要可选择上课周数,支持添加和修改上课时间,支持一周上多节课或者不上课。为了方便识别,需要让课表上相同的课程显示相同的颜色。其他细节上的优化以使用体验再做修改。

2.实现结果:

 以下是课表的一些演示(华为P50E实机):

以下是课表中用到的各种技术: 

1.抽屉导航栏:
采用androidx.drawerlayout.widget.DrawerLayout,在activity_main.xml中,DrawerLayout中第一部分使用了include导入main_content.xml文件中的内容,方便导航栏与主体内容分开编写。在主页面java文件中,使用drawer_layout.openDrawer(GravityCompat.START);
可以打开抽屉导航栏。
2.JAVA动态添加控件:
课程显示和左边时间轴的显示都是动态添加到网格布局中的,使用了GridLayout.LayoutParams类型与course_gridLayout.addView()函数相结合具体操作可以看代码。其他的一些,比如设置中时间轴的数目也同理。
3.日期,数字选择和颜色选择等对话框:
程序使用了大量对话框与用户做交互,比如选择课程颜色时,除了预设的几种颜色以外,还可以点击左边的调色盘来RGB选色,这里的对话框用到了拖动条和输入文本框的回调,数字选择器也很常见。其中利用了SeekBarEditText的回调函数。
4.SharedPreferences储存数据:
由于课表数据量不大,所以这里用到了SharedPreferences来存储数据,并且为了存储复杂的课程数据,写了Course_Data类进行字符串转换变量。从而使得每个课程只需设置一个键即可存储。
 
5.ListView的使用:
课表中在两处使用到了ListView,分别是创建课程的课程时间部分和抽屉导航栏中的所有课程,并写了两个适配器:Adapter_Course_DataAdapter_CourseAdapter_Data简单,Adapter_Course_Data东西多,比较复杂。
其中,因为ListView的复用逻辑,会出现渲染和逻辑上的问题,比如我在第0项,往下滑动,露出第1项一点,再划上去,点逻辑上应该是第0项的按钮,但实际会执行第1项的按钮。为了避免这些问题,我使用了listView.smoothScrollToPosition(position);来让用户滑动时,窗口有一定的顶端吸附能力,在第1项点不到第0项的按钮,从而解决了这个问题。
 
6.通知:
仅有一个今日课程的简易通知,在MainActivity.java中,使用了Send_Schedule_Notification()函数进行通知的发送,并通过复用通知来更新之前的通知,从而实现了显示今日课程与上课时间的功能
 
7.正则表达式:
在设置中,当用户输入时间时,用到了String regex = "^([01]?[0-9]|2[0-3]):[0-5]?[0-9]$";来做正则匹配,使得用户的输入限制在0~23:0~59这样的24小时制格式。
 
8.字符过滤器:
有两个字符过滤器,第一个Custom_Input_Filter.java用于添加课程时限制输入“;& | ”这三个字符,因为上面的字符串转换时用这几个作为分隔符,第二个Custom_Input_Filter_number.java用于在设置中,用户输入时间时限制(数字)与上面正则表达式配合。
 
9.亮、暗(深、浅)主题手动切换:
打开抽屉导航栏,上面有张AI绘制的图片,点击即可切换亮暗主题。主要就是用getDelegate().setLocalNightMode()函数进行主题颜色的切换,同时设定了亮暗两个styles.xml文件,在布局中使用相同的style名,不同主题下就会调用不同文件中的style,从而实现主题切换。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/589025.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言中的递归函数的简单应用

C语言中的递归函数的简单应用 递归函数简介注意 使用示例求n的阶乘分析问题:代码示例: 求Fibonacci数列分析问题:代码示例 求最大公约数分析问题:代码一:辗转相减法:代码二:辗转相除法&#xff…

第十一章 创建Callout Library - 使用 J 链接类型传递标准计数字符串

文章目录 第十一章 创建Callout Library - 使用 J 链接类型传递标准计数字符串使用 J 链接类型传递标准计数字符串使用 J 连接传递字符串 第十一章 创建Callout Library - 使用 J 链接类型传递标准计数字符串 使用 J 链接类型传递标准计数字符串 iris-callin.h 头文件定义了计…

SSM框架(Spring + SpringMVC + Mybatis)

MVC即model view controller。(模型,视图,控制器) entity层(model层,domain层) 用于存放我们的实体类,类中定义了多个类属性,并与数据库表的字段保持一致,一张表对应一个类。主要用…

排序整形数组--------每日一题

大家好这是今年最后的一篇了,感谢大家的支持,新的一年我会更加努力地。 文章目录 目录 文章目录 题⽬描述: 输⼊10个整数,然后使⽤冒泡排序对数组内容进⾏升序排序,然后打印数组的内容 一、题目解读 冒泡排序是⼀种基础…

用Qt开发的十大理由

#1 完美的用户体验 “就最终体验、性能和特性而言,Qt 绝对是开发Radeon SoftwareCrimson Edition的正确选择。”“MBUS 是梅赛德斯-奔驰汽车内的全新用户体验。我们用 Qt 开发了绝大部分的UI体验和软件,包括屏幕动画,屏幕间的过渡和小组件。Qt 使我们能够快速开发出原型系统…

[verilog] 免费开源的 verilog 仿真工具:icarus verilog

主页: 元存储博客 文章目录 前言1. 下载2. 安装3. 安装成功?4. 使用总结前言 知名的Verilog仿真工具主要为三大主流的产品:mentor的modelsim/questasim,candence的NC-verilog,synopsys的VCS。但都不是免费的,所以我一个都不讲。 作为verilog入门学习的仿真工具,有时候…

Linux进行模型微调前的环境准备

在Linux机器上对模型进行微调前,首先需要准备环境,即安装相关的软件。因为linux是一个无界面操作系统,软件安装完成后,还需要有便捷的交互方式编写脚本,调试脚本。此篇博客将专门介绍如何快速安装所需依赖软件&#xf…

2023-12-25 LeetCode每日一题(不浪费原料的汉堡制作方案)

2023-12-25每日一题 一、题目编号 1276. 不浪费原料的汉堡制作方案二、题目链接 点击跳转到题目位置 三、题目描述 圣诞活动预热开始啦,汉堡店推出了全新的汉堡套餐。为了避免浪费原料,请你帮他们制定合适的制作计划。 给你两个整数 tomatoSlices …

全志R128 DSP开发工具安装教程

资料准备 要编译和仿真DSP,需要以下资料: DSP 核 SDK,SDK 需要包含DSP 编译源码。Cadence Xtensa 的 Windows IDE 工具 (Xplorer‑8.0.13 版本), Windows 版本 DSP 的 package 包。Cadence Xtensa 的 License,用于服…

数据通信网络基础的网络参考模型华为ICT网络赛道

网络参考模型 目录 网络参考模型 2.1.应用与数据 2.2.网络参考模型与标准协议 2.2.1.OSI参考模型 2.2.2.TCP/IP参考模型 2.2.3.应用层 2.2.4.传输层 2.2.5.TCP和UDP 2.2.6.网络层 2.2.7.数据链路层 2.2.8.物理层 2.3.数据通信过程 2.1.应用与数据 应用的存在&#…

Flink学习-时间和窗口

在流数据处理应用中,一个很重要、也很常见的操作就是窗口计算。所谓的“窗口”,一 般就是划定的一段时间范围,也就是“时间窗”;对在这范围内的数据进行处理,就是所谓的 窗口计算。所以窗口和时间往往是分不开的。 时…

WPF 基础(Binding 二)

续接上文,本章继续讲解WPF Binding相关知识,主要内容是绑定的模式和绑定源(Source) 5绑定模式 在使用Binding类的时候有4中绑定模式可以选择 BindingMode TwoWay导致对源属性或目标属性的更改可自动更新对方。此绑定类型适用于…

面试手撕算法高频专题:数组的双指针思想及应用(算法村第三关白银挑战)

所谓的双指针其实就是两个变量,不一定真的是指针。 快慢指针:一起向前走对撞指针、相向指针:从两头向中间走背向指针:从中间向两头走 移除值为val的元素 题目描述 27. 移除元素 - 力扣(LeetCode) 给你…

【更新】cyのMemo(20231231~)

序言 最终,无事发生,我的跨年是在图书馆(因为我忘带卡打不开实验室门),和去年一样。其实我并不想去图书馆,但是觉得在床上跨年太颓废,找个好点的处所,至少说得过去些。人嘛&#xf…

12.31_黑马数据结构与算法笔记Java

目录 345 设计跳表 Leetcode 1206 346 设计最小栈 Leetcode 155 347 设计端网址 Leetcode 355 348 设计推特 Leetcode 355 349 股票系列问题 Leetcode 121 350 股票系列问题 Leetcode 122 351 股票系列问题 Leetcode 714 352 股票系列问题 Leetcode 309 353 股票系列问…

【CISSP学习笔记】6. 安全开发

该知识领域涉及如下考点,具体内容分布于如下各个子章节: 理解安全并将其融入软件开发生命周期 (SDLC) 中在软件开发环境中识别和应用安全控制评估软件安全的有效性评估获得软件对安全的影响定义并应用安全编码准则和标准 6.1. 系统开发控制 6.1.1. 软…

以太网转RS485通讯类库封装

最近选用有人科技的以太网转RS485模块做项目,设备真漂亮,国货之光。调通了通讯的代码,发到网上供大家参考,多多交流。 以下分别是配套的头文件与源文件: /*******************************************************…

EOS开发Ubuntu安装EOSIO.CDT(Install the EOSIO.CDT)

EOS开发Ubuntu安装EOSIO.CDT(Install the EOSIO.CDT) EOSIO.CDT介绍:EOSIO合约开发工具包,简称CDT,是与合约编译相关的工具集合。而且后续教程主要使用 CDT 来编译合约和生成 ABI,不要忽略。 刚才我们安装好…

【数值分析】LU分解解Ax=b,matlab自己编程实现

LU分解(直接三角分解,Doolittle分解) A x b , A L U Axb \,\,,\,\, ALU Axb,ALU { L y b U x y \begin{cases} Lyb \\ Uxy \end{cases} {LybUxy​ 矩阵 L {L} L 的对角元素为 1 {1} 1 ,矩阵 U {U} U 的第一行和 A {A} A …

Octave处理高斯光束

文章目录 读取图像截取感兴趣区域强度图拟合 Octave是一种开源的数值计算软件,主要用于科学计算、数据分析和数值模拟等领域。既提供了一个用户友好的命令行界面,使用户能够通过输入简单的命令来进行各种数学运算和数据操作。也提供了功能完备的GUI窗口&…