Android课程表控件v2.0.2用法大合集

> 本文中的功能介绍、控件用法均针对v2.0.2以其以上,你可以在 ChangeLog 查看本控件的开发进展,作者联系方式1193600556@qq.com

TimetableView是一款开源的、完善、高效的Android课程表控件。高效在哪?周次切换高效、样式文件极少(只需1个,v1.x需要36个只能实现12种样式)

  • 支持xml设置属性
  • 丰富的课程工具包
  • 支持多种自定义
  • 课程颜色管理
  • 调用简洁、性能高效
  • ScrollView可替换
  • 可设置背景以及透明度
  • 数据源可添加额外信息

目录

准备数据源

在开始使用控件之前,你需要准备好数据源,数据可以从网上获取或者使用本地数据,为了方便演示,使用本地的JSON字符串,然后再将其解析为需要的格式

参见 MySubjectSubjectExtrasSubjectRepertory

基础功能

本节你将掌握如何使用本控件搭建自己的课表界面。这里使用的版本为2.0.2
虽说本节名字为基础功能,但是这是一个综合的例子,如果有些地方看不明白或者属性记不住,那么这是正常的,看到下文对应的章节时会清晰很多,如果仍然不懂请联系我~
完整代码参见 BaseFuncActivity

添加依赖

Gradle

compile 'com.zhuangfei:TimetableView:2.0.2'

Maven

<dependency>
  <groupId>com.zhuangfei</groupId>
  <artifactId>TimetableView</artifactId>
  <version>2.0.2</version>
  <type>pom</type>
</dependency>

添加控件

该控件包含的基础组件有日期栏、侧边栏、课表视图,在布局文件中加入如下代码后会包含这三个基础组件,注意要添加背景色,没有背景图片可以添加白色背景。

    <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"
        android:background="@drawable/bg3">
    </com.zhuangfei.timetable.TimetableView>

数据源设置

数据源的设置方式有两种,以下分别来介绍:

方法1:使用指定的格式List<Schedule>,Schedule是控件提供的课程实体类,你可以将自己的数据封装为指定格式,然后进行如下配置即可

 mTimetableView.data(scheduleList)
                .curWeek(1)
                .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;
   }
}
  • 使用source()设置
//模拟获取课程数据:自定义格式
List<MySubject> mySubjects = SubjectRepertory.loadDefaultSubjects();

//设置数据源并显示
mTimetableView.source(mySubjects)
                .curWeek(1)
                .showView();    

配置属性

我直接把这部分整个代码放出来了,分以下三步:

  1. 获取控件
  2. 设置WeekView属性
  3. 设置TimetableView属性

使用如下方式获取到控件

   TimetableView mTimetableView;
   WeekView mWeekView;
/**
     * 初始化课程控件
     */
    private void initTimetableView() {
        //获取控件
        mWeekView = findViewById(R.id.id_weekview);
        mTimetableView = findViewById(R.id.id_timetableView);

        //设置周次选择属性
        mWeekView.source(mySubjects)
                .curWeek(1)
                .callback(new IWeekView.OnWeekItemClickedListener() {
                    @Override
                    public void onWeekClicked(int week) {
                        int cur = mTimetableView.curWeek();
                       //更新切换后的日期,从当前周cur->切换的周week
                        mTimetableView.onDateBuildListener()
                                .onUpdateDate(cur, week);
                        //课表切换周次
                        mTimetableView.changeWeekOnly(week);
                    }
                })
                .callback(new IWeekView.OnWeekLeftClickedListener() {
                    @Override
                    public void onWeekLeftClicked() {
                        onWeekLeftLayoutClicked();
                    }
                })
                .isShow(false)//设置隐藏,默认显示
                .showView();

        mTimetableView.source(mySubjects)
                .curWeek(1)
                .curTerm("大三下学期")
                .maxSlideItem(10)
                //透明度
                //日期栏0.1f、侧边栏0.1f,周次选择栏0.6f
                //透明度范围为0->1,0为全透明,1为不透明
                .alpha(0.3f, 0.1f, 0.6f)
                .callback(new ISchedule.OnItemClickListener() {
                    @Override
                    public void onItemClick(View v, List<Schedule> scheduleList) {
                        display(scheduleList);
                    }
                })
                .callback(new ISchedule.OnItemLongClickListener() {
                    @Override
                    public void onLongClick(View v, int day, int start) {
                        Toast.makeText(BaseFuncActivity.this,
                                "长按:周" + day  + ",第" + start + "节",
                                Toast.LENGTH_SHORT).show();
                    }
                })
                .callback(new ISchedule.OnWeekChangedListener() {
                    @Override
                    public void onWeekChanged(int curWeek) {
                        titleTextView.setText("第" + curWeek + "周");
                    }
                })
                //旗标布局点击监听
                .callback(new ISchedule.OnFlaglayoutClickListener() {
                    @Override
                    public void onFlaglayoutClick(int day, int start) {
                        mTimetableView.hideFlaglayout();
                        Toast.makeText(BaseFuncActivity.this,
                                "点击了旗标:周" + (day + 1) + ",第" + start + "节",
                                Toast.LENGTH_SHORT).show();
                    }
                })
                .showView();
    }

删除课程

/**
     * 删除课程
     * 内部使用集合维护课程数据,操作集合的方法来操作它即可
     * 最后更新一下视图(全局更新)
     */
    protected void deleteSubject() {
        int size = mTimetableView.dataSource().size();
        int pos = (int) (Math.random() * size);
        if (size > 0) {
            mTimetableView.dataSource().remove(pos);
            mTimetableView.updateView();
        }
    }

添加课程

    /**
     * 添加课程
     * 内部使用集合维护课程数据,操作集合的方法来操作它即可
     * 最后更新一下视图(全局更新)
     */
    protected void addSubject() {
        List<Schedule> dataSource=mTimetableView.dataSource();
        int size = dataSource.size();
        if (size > 0) {
            Schedule schedule = dataSource.get(0);
            dataSource.add(schedule);
            mTimetableView.updateView();
        }
    }

非本周课程显示与隐藏

/**
     * 隐藏非本周课程
     * 修改了内容的显示,所以必须更新全部(性能不高)
     * 建议:在初始化时设置该属性
     *
     *  updateView()被调用后,会重新构建课程,课程会回到当前周
     */
    protected void hideNonThisWeek() {
        mTimetableView.isShowNotCurWeek(false).updateView();
    }

    /**
     * 显示非本周课程
     * 修改了内容的显示,所以必须更新全部(性能不高)
     * 建议:在初始化时设置该属性
     */
    protected void
  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值