(仿超级课程表)结合MaterialSheetFab实现简单的课程表功能
结合MaterialSheetFab实现简单的课程表功能
一直觉得超级课程表的课表界面做的比较好,所以一直在探索想实现一个类似的功能,琢磨了一段时间,做了一个比较简陋的版本,不敢说是模仿超级课程表,因为一点都不像,但是还是费了些心思,在这里就当做下笔记。在此过程中也参考了许多前辈的经验,在此一并谢过。
话不多说,先上效果图:
1.课表数据来源于学校教务处,是真实数据:
顶部显示日期的地方有些错开了,但是这是模拟器的问题,在真机上并没有出现,所以没有处理。
2.由于我们学校的课程是分时段上的,比如1~8周是一门课程,9~17周又是另外一门课程,这里能根据当前周动态改变,当然这并不是重点,这是在解析数据时需要注意的地方,看效果图:
3.能够在空白地方长按添加课程,已有课程点击能够查看详细信息,并且能修改删除,上效果图:
做的比较简陋,但是作为一个新手,这样简陋的效果也花了很大心思,下边简单说下实现思路
a)在布局上主要是用了Linearlayout和ScrollView结合,顶部是Linearlayout,课程格子是ScrollView,在ScrollView里面包裹了一个RelativeLayout,然后在代码里面动态添加每一个课程的格子,课程格子是TextView。
b)数据是请求的教务处的真实课程数据,解析之后封装成一个个课程对象,把所有课程信息存储在本地,避免每次请求,然后根据当前周以及课程开始周、结束周、单双周等等信息,将课程信息动态设置给TextVeiw。贴上核心代码:
<span style="font-size:18px;"> /*** @param numWeek 周几* @param numDay 第几节* @param name 课程名* @param address 教室* @return*/private void setCourse(final int numWeek, final int numDay, String name, String address) {// 添加课程信息TextView courseInfo = new TextView(getActivity());courseInfo.setText(name + "\n@" + address);// 该textview的高度根据其节数的跨度来设置RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(aveWidth * 31 / 32, (gridHeight - 5));// textview的位置由课程开始节数和上课的时间(day of week)确定rlp.topMargin = 5 + (numDay - 1) * gridHeight;// rlp.leftMargin = 2;// 偏移由这节课是星期几决定rlp.addRule(RelativeLayout.RIGHT_OF, numWeek);// 字体剧中courseInfo.setGravity(Gravity.CENTER);// 设置一种背景courseInfo.setClickable(true);courseInfo.setBackgroundResource(background[(int) (Math.random() * background.length)]);// 0--15之间的随机数
// courseInfo.setBackgroundResource(R.mipmap.ic_course_bg_bohelv);courseInfo.setTextSize(14);courseInfo.setLayoutParams(rlp);courseInfo.setTextColor(Color.WHITE);// 设置不透明度courseInfo.getBackground().setAlpha(222);courseInfo.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {
// Toast.makeText(getActivity(), "周" + numWeek + "第" + numDay + "节", Toast.LENGTH_SHORT).show();
// Toast.makeText()showCourseInfo(numWeek, numDay);}});courseInfo.setTag(numWeek + "," + numDay);course_table_layout.addView(courseInfo);}</span>
c)处理每个格子的点击事件,空白格子点击之后,通过StartActivityforresult跳转到添加课程界面,填好信息之后返回,然后更新本地课程数据,最后更新UI上的课程信息,有课程的格子点击之后弹出课程详细信息,以及删除修改等等按钮,点击删除之后将本节课从列表中删除,点击修改之后,将现有课程信息封装,通过startactivityforresult跳转到修改课程信息界面,修改之后将新的信息返回并保存,然后再次更新UI界面。
关于右下角的一个按钮是使用了github上的一个开源控件,之前也写了一篇文章简单介绍用法,附上地址:MaterialSheetFab的详细使用方法
由于是一个完整的项目,源码不方便发出来只能附上课表UI代码,关于课表数据这块没什么好说的,逻辑代码也不是主要的,这里主要的是这个界面,附上源码:点击下载源码
(仿超级课程表)结合MaterialSheetFab实现简单的课程表功能相关推荐
- 简单方法实现仿超级课程表界面
简单方法实现仿超级课程表界面 (这个代码其实是我好久之前写武大课程表的时候自己突发奇想实现的.由于当时代码水平不高,所以想出来的方法可能有点歪门邪道的感觉.现在看来,对于实现的方法又有了许多的想法,不 ...
- 实践--课程表(仿超级课程表展示课表)
总览 在上一篇博客实践–课程表(ViewPager实现)中已经实现了课表内容的获取和展示,可是因为ViewPager的显示的效果的局限性,对于课表的一览性较差.而且没有单双周的区分,不能实时显示,故将 ...
- HTML5期末大作业:商城网站设计——仿团购商城(1页) 简单个人网页设计作业 静态HTML旅行主题网页作业 DW个人网站模板下载 大学生简单个人网页作品代码 个人网页制作 学生个人网页Dreamwe
HTML5期末大作业:商城网站设计--仿团购商城(1页) 简单个人网页设计作业 静态HTML旅行主题网页作业 DW个人网站模板下载 大学生简单个人网页作品代码 个人网页制作 学生个人网页Dreamwe ...
- 计算机word做课程表实验报告,用Word制作简单的课程表
在我们身边,在日常生活中,课课家经常会接触到各式各样的表格,有课程表,有简历等等,表格可以让大家更直接快捷的了解到有用的信息,所以学好制作表格很有必要.那么这些表格是怎样做出来的呢?是不是大家想知道如 ...
- 【HTML】一个简单的课程表
table实现简单的课程表: <!-- 表格 td属性:closspan=向右合并单元格;rowspan=向下合并单元格 边框等与一像素 --><table border=" ...
- HTML+CSS+JS计——仿苏苏超市(1页) 大学生简单个人静态HTML网页设计作品 DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载
HTML5期末大作业:苏苏网站设计--仿苏苏超市(1页) 大学生简单个人静态HTML网页设计作品 DIV布局个人介绍 文章目录 HTML5期末大作业:苏苏网站设计--仿苏苏超市(1页) 大学生简单个人 ...
- HTML5期末大作业:苏苏网站设计——仿苏苏超市(1页) 大学生简单个人静态HTML网页设计作品 DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载
HTML5期末大作业:苏苏网站设计--仿苏苏超市(1页) 大学生简单个人静态HTML网页设计作品 DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载 常见网页设计作业题材有 个人. 美食. ...
- java swing课程表设计_javaswing.Shedule 这是一个简单的课程表设计,数据连接为oracle 238万源代码下载- www.pudn.com...
文件名称: javaswing.Shedule下载 收藏√ [ 5 4 3 2 1 ] 开发工具: Java 文件大小: 57 KB 上传时间: 2014-10-28 下载次数: 2 提 供 ...
- android仿微信发布动态功能,Android GridView扩展仿微信微博发图动态添加删除图片功能.pdf...
Android GridView扩扩展展仿仿微微信信微微博博发发图图动动态态添添加加删删除除图图片片功功能能 这篇文章主要为大家详细介绍了Android GridView扩展仿微信微博发图动态添加删除 ...
最新文章
- Android 通过创建一个类来传递对象
- Xbox One 游戏欣赏: Xbox Fitness 太极拳游戏
- 人机接口设备攻击(HID Attack)
- MySLQ排序后标记排行
- C#.NET 大型企业信息化系统 - 防黑客攻击 - SSO系统加固优化经验分享
- sql server系统表详细说明(二)(摘)
- 计算机组成 指令扩展,计算机组成原理课程设计--指令扩展设计.doc
- 【Android】Activity生命周期
- Chrome 74 稳定版发布,Windows 10 支持黑暗模式
- JavaScript——根据数组中的某个值进行排序
- python中grid函数_python tkinter中的grid布局是什么?
- eclipse里maven install时,报错提示jdk为无效的目标版本:1.7
- 图解TCP/IP详解(史上最全)
- mock server java_1分钟搭建极简mock server
- 计算机及格人数函数公式大全,excel函数计算及格人数和合格人数
- 短信验证码接口测试【接入之前必备工作】
- 桥接模式、NAT模式和仅主机模式
- 两种典型的解空间树:子集树和排列树
- 王垠—写给清华大学的退学申请
- iostat命令参数详解