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.hqwc.cn/news/312708.html

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

相关文章

苹果Mac电脑甘特图管 EasyGantt最新 for mac

EasyGantt提供直观的界面,让用户能够轻松创建具有时间轴视图的甘特图。你可以添加并排列任务、设置任务的开始和结束日期、调整任务之间的依赖关系等。 任务管理:软件允许你添加、编辑和删除任务,设定任务的优先级和状态,并为每个…

CSS2_基础学习

CSS2_基础学习 一、css基础知识二、css选择器2.0 选择器的优先级2.1 CSS基本选择器2.2 复合选择器2.2.1. 交集选择器2.2.2. 并集选择器2.2.3. 后代选择器(加空格)2.2.4. 子代选择器2.2.5. 兄弟选择器2.2.6. 属性选择器2.2.7. 伪类选择器2.2.8. 伪元素选择…

uni-app 前后端调用实例 基于Springboot 下拉刷新实现

锋哥原创的uni-app视频教程: 2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中...共计23条视频,包括:第1讲 uni…

Nexus私服简介及搭建(Linux3.62版本)

文章目录 一、Nexus的安装1、运行程序2、查看运行日志和初始密码3、启动配置文件的修改 二、Nexus的使用1、Nexus使用流程说明2、库类型说明2.1、maven-public库配置说明2.2、maven-central库配置说明 3、用户本地配置使用maven-public库3.1、禁用了匿名访问,额外需…

LeetCode二叉树路径和专题:最大路径和与路径总和计数的策略

目录 437. 路径总和 III 深度优先遍历 前缀和优化 124. 二叉树中的最大路径和 437. 路径总和 III 给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。 路径 不需要从根节点开始&#xf…

arkts状态管理使用(@State、@Prop、@Link、@Provide、@Consume、@objectLink和@observed)

一、状态管理 1.在声明式UI中,是以状态驱动视图更新: ①状态(State):指驱动视图更新的数据(被装饰器标记的变量) ②视图(View):基于UI描述渲染得到用户界面 注意: ①…

【VB测绘程序设计】案例6——华氏温度与摄氏温度之间的转换程序(附源代码)

【VB测绘程序设计】案例6——华氏温度与摄氏温度之间的转换程序(附源代码) 文章目录 前言一、界面显示二、程序说明三、程序代码1程序变换2程序变换四、数据演示总结前言 本文主要掌握Val()函数以及String数据类型的应用,通过2个text来输入数据,2个Command控件来执行转换…

快速部署supervisord详解

Supervisor是一个用于监控和管理进程的工具。它可以在Unix-like系统中启动、停止、重启和管理后台进程,确保这些进程始终保持运行状态。 yum check-update 更新yum软件包索引 yum install epel-release -y 下载eprl源 yum install supervisor -y 直接yu…

【c语言】飞机大战2

1.优化边界问题 之前视频中当使用drawAlpha函数时,是为了去除飞机后面变透明,当时当飞机到达边界的时候,会出现异常退出,这是因为drawAlpha函数不稳定,昨天试过制作掩码图,下载了一个ps,改的话&#xff0c…

计算机基础面试题 |02.精选计算机基础面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

机器学习:贝叶斯估计在新闻分类任务中的应用

文章摘要 随着互联网的普及和发展,大量的新闻信息涌入我们的生活。然而,这些新闻信息的质量参差不齐,有些甚至包含虚假或误导性的内容。因此,对新闻进行有效的分类和筛选,以便用户能够快速获取真实、有价值的信息&…

虚拟专线网络(IP-VPN)

虚拟专线网络(IP-VPN),因为它的安全性和可靠性。通过亚洲领先的 IP VPN 提供商。享受更高的可管理性和可扩展性,在多个站点之间交付 IP 流量或数据包,拥有亚太地区最大的 IP 骨干网。 1,保证正常运行时间,在网络链路发…