v2.0.1文档
本文中的功能介绍、控件用法均针对
v2.0.0
以及v2.0.1
,它并不是最新的,你可以在 ChangeLog 查看本控件的开发进展,作者联系方式1193600556@qq.com
TimetableView是一款开源的Android课程表控件。
- 支持xml设置属性、数据源
- 提供了默认的周次选择栏(超级课程表效果),支持自定义
- 提供了默认的日期栏,支持自定义
- 多项侧边栏配置项,可设置时间的显示与否,支持自定义
- 多项课程项配置项,可拦截、可修改弧度、可设置非本周是否显示
- 课程颜色管理:使用颜色池来管理颜色,操作灵活
- 高效灵活:切换周次高效率、一个样式文件实现了多种课程项样式效果
- 可替换滚动布局:不将该控件绑死在固有的ScrollView中
- 无界面操作:你可以使用工具类对课程进行模拟分配颜色、获取有课的课程等
准备数据源
在开始使用控件之前,你需要准备好数据源,数据可以从网上获取或者使用本地数据,为了方便演示,使用本地的JSON字符串,然后再将其解析为需要的格式
基础功能
本节你将掌握如何使用本控件搭建自己的课表界面。这里使用的版本为
2.0.1
添加依赖
Gradle
compile 'com.zhuangfei:TimetableView:2.0.1'
Maven
<dependency>
<groupId>com.zhuangfei</groupId>
<artifactId>TimetableView</artifactId>
<version>2.0.1</version>
<type>pom</type>
</dependency>
添加控件
该控件包含的基础组件有日期栏、侧边栏、课表视图,在布局文件中加入如下代码后会包含这三个基础组件
<com.zhuangfei.timetable.TimetableView
android:id="@+id/id_timetableView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.zhuangfei.timetable.TimetableView>
配置属性
使用如下方式获取到控件
TimetableView mTimetableView = findViewById(R.id.id_timetableView);
属性的设置分为两类:与课程项构建有关的、与全局有关的,前者的配置在ScheduleManager
对象中,后者的配置在TimetableView
中,所有配置信息需要在showView()
调用前完成,否则无效
以下代码用来监听课程项点击事件:
mTimetableView.getScheduleManager()
.setOnItemClickListener(new ISchedule.OnItemClickListener() {
@Override
public void onItemClick(View v, List<Schedule> scheduleList) {
display(scheduleList);
}
});
然后设置它的一些全局属性,最后调用showView()
用来创建和显示课表视图,代码如下:
mTimetableView.setSource(mySubjects)
.setCurWeek(1)
.setCurTerm("大三下学期")
.showView();
至此,课表已经可以显示在视图上了,你可能会问:设置数据源时mySubjects
是什么?不要着急,继续看…
数据源设置
数据源的设置方式有两种,以下分别来介绍:
方法1:使用指定的格式List<Schedule>
,Schedule
是控件提供的课程实体类,你可以将自己的数据封装为指定格式,然后进行如下配置即可
mTimetableView.setData(scheduleList)
.setCurWeek(1)
.setCurTerm("大三下学期")
.showView();
方法2:方法1在很多场景下都满足不了需求,往往需要定义自己的课程实体类,你可以跟随以下几个步骤来使用它
- 创建自定义的实体类并实现
ScheduleEnable
接口
public class MySubject implements ScheduleEnable {
//省略属性、setter、getter、构造函数
@Override
public Schedule getSchedule() {
Schedule schedule=new Schedule();
schedule.setDay(getDay());
schedule.setName(getName());
schedule.setRoom(getRoom());
schedule.setStart(getStart());
schedule.setStep(getStep());
schedule.setTeacher(getTeacher());
schedule.setWeekList(getWeekList());
schedule.setColorRandom(2);
return schedule;
}
}
- 使用
setSource()
设置
//模拟获取课程数据:自定义格式
List<MySubject> mySubjects = SubjectRepertory.loadDefaultSubjects();
//设置数据源并显示
mTimetableView.setSource(mySubjects)
.setCurWeek(1)
.setCurTerm("大三下学期")
.showView();
可见,上述那个例子使用的是方法2,我个人也建议使用方法2:比较灵活,可根据具体情况选择。简单几步,课表界面就可以显示出来了,是不是有点小激动呀。
删除课程
/**
* 删除课程
* 内部使用集合维护课程数据,操作集合的方法来操作它即可
* 最后更新一下视图(全局更新)
*/
protected void deleteSubject() {
int size = mTimetableView.getDataSource().size();
int pos = (int) (Math.random() * size);
if (size > 0) {
mTimetableView.getDataSource().remove(pos);
mTimetableView.updateView();
}
}
添加课程
/**
* 添加课程
* 内部使用集合维护课程数据,操作集合的方法来操作它即可
* 最后更新一下视图(全局更新)
*/
protected void addSubject() {
int size = mTimetableView.getDataSource().size();
if (size > 0) {
Schedule schedule = mTimetableView.getDataSource().get(0);
mTimetableView.getDataSource().add(schedule);
mTimetableView.updateView();
}
}
周次选择栏
周次选择栏
WeekView
是控件实现的一个默认的周次选择控件,你可以使用它快速的拥有周次选择功能,TimetableView
是没有周次选择功能的,所以需要两者配合使用。
本节你将掌握使用zfman/TimetableView添加一个周次选择栏
默认的周次选择栏
1.添加控件
在布局文件中放一个TimetableView
,然后在TimetableView
的上边放一个WeekView
<com.zhuangfei.timetable.view.WeekView
android:id="@+id/id_weekview"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<com.zhuangfei.timetable.TimetableView
android:id="@+id/id_timetableView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.zhuangfei.timetable.TimetableView>
2.获取控件
TimetableView mTimetableView;
WeekView weekView;
//获取控件
mTimetableView = findViewById(R.id.id_timetableView);
weekView=findViewById(R.id.id_weekview);
3.设置WeekView
//设置周次选择属性
weekView.setSource(mySubjects)
.setCurWeek(1)
.setOnWeekItemClickedListener(new IWeekView.OnWeekItemClickedListener() {
@Override
public void onWeekClicked(int curWeek) {
mTimetableView.changeWeekOnly(curWeek);
}
})
.setOnWeekLeftClickedListener(new IWeekView.OnWeekLeftClickedListener() {
@Override
public void onWeekLeftClicked() {
Log.d(TAG, "onWeekLeftClicked: ");
onWeekLeftLayoutClicked();
}
})
.showView();
4.设置TimetableView