php模拟超级课程表,一个功能完善、UI简洁的仿超级课程表的课表控件 TimetableView...
TimetableView
一個(gè)非常漂亮的Android課程表控件,該控件支持的功能:
設(shè)置數(shù)據(jù)源
顏色設(shè)置,控件內(nèi)置17種顏色
觸感反饋,每種內(nèi)置顏色都有對(duì)應(yīng)的三個(gè)樣式
日期顯示與高亮
課表Item點(diǎn)擊事件處理
解決課程重疊、交叉的問(wèn)題,解決的效果同超級(jí)課程表
高效的切換周次
獲取某天要上的課程
運(yùn)行效果
1.課表頁(yè)面
2.獲取周一所有課程
3.功能選項(xiàng)
Resource
簡(jiǎn)單使用
Step 1:添加項(xiàng)目依賴
在build.gradle文件中添加以下代碼
compile 'com.zhuangfei:TimetableView:1.0.2'
Step 2:引入TimetableView控件
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/id_timetableView"
android:orientation="vertical">
Step 3:初始化控件、設(shè)置
設(shè)置數(shù)據(jù)源時(shí),你需要將你的課程數(shù)據(jù)轉(zhuǎn)化為L(zhǎng)ist對(duì)象,請(qǐng)參考Demo的MainActivity
mTimetableView=(TimetableView) findViewById(R.id.id_timetableView);
mTimetableView.setDataSource(subjectBeans)
.setCurTerm("大三上學(xué)期")
.setCurWeek(curWeek)
.setOnSubjectItemClickListener(this)
.showTimetableView();
//調(diào)用過(guò)showSubjectView后需要調(diào)用changWeek()
//第二個(gè)參數(shù)為true時(shí)在改變課表布局的同時(shí)也會(huì)將第一個(gè)參數(shù)設(shè)置為當(dāng)前周
//第二個(gè)參數(shù)為false時(shí)只改變課表布局
mTimetableView.changeWeek(curWeek, true);
屬性
先看下timetableView可以設(shè)置哪些屬性
mTimetableView.setDataSource(List)
.setCurTerm(String)//設(shè)置學(xué)期
.setCurWeek(int)//設(shè)置當(dāng)前周
.setMax(boolean)//是否啟用最大節(jié)次(12節(jié))
.setShowDashLayer(boolean)//是否顯示虛線層,默認(rèn)顯示
.bindTitleView(TextView)//綁定一個(gè)TextView當(dāng)數(shù)據(jù)變化時(shí)同時(shí)更新該文本
.setOnSubjectBindViewListener(OnSubjectBindViewListener)//指定一個(gè)在數(shù)據(jù)變化時(shí)更新文本的規(guī)則
.setOnSubjectItemClickListener(OnSubjectItemClickListener)//指定一個(gè)item被點(diǎn)擊的事件處理方式
.showTimetableView();//顯示視圖
動(dòng)態(tài)更新課表
不管刪除還是添加,只需要更改數(shù)據(jù)源,最后調(diào)用notifyDataSourceChanged()來(lái)通知UI界面同步即可。
//刪除課程
protected void deleteSubject() {
int pos = (int) (Math.random() * subjectBeans.size());
if (subjectBeans.size() > 0) {
subjectBeans.remove(pos);
mTimetableView.notifyDataSourceChanged();
} else {
Toast.makeText(this, "沒(méi)有課程啦!", Toast.LENGTH_SHORT).show();
}
}
切換周次
切換周次的效率非常高,你可以使用以下代碼切換周次:
//第二個(gè)參數(shù)為:是否強(qiáng)制將第一個(gè)參數(shù)設(shè)置為當(dāng)前周
timetableView.changeWeek(2,true);
獲取某天的課程(要求版本>=v1.0.1)
SubjectUtils是課程的工具類(lèi),調(diào)用其方法獲取課程,示例如下:
//顯示周一課程
protected void showTodaySubjects() {
//0表示周一,依次類(lèi)推,6代表周日
List beans = SubjectUtils.getTodaySubjects(subjectBeans, curWeek, 0);
String subjectStr=showSubjects(beans);
Toast.makeText(this, "周一有" + beans.size() + "門(mén)課要上\n\n" + subjectStr, Toast.LENGTH_SHORT).show();
}
//顯示周一所有課程
protected void showTodayAllSubjects() {
List beans = SubjectUtils.getTodayAllSubjects(subjectBeans, 0);
String subjectStr=showSubjects(beans);
Toast.makeText(this, "周一共有" + beans.size() + "門(mén)課\n\n" + subjectStr, Toast.LENGTH_SHORT).show();
}
綁定TextView
當(dāng)curWeek、數(shù)據(jù)源、curTerm任一發(fā)生變化,系統(tǒng)根據(jù)自己定義的規(guī)則對(duì)綁定的TextView進(jìn)行文字同步,示例如下:
mTimetableView.setDataSource(subjectBeans)
.setCurTerm("大三上學(xué)期")
.setCurWeek(curWeek)
.bindTitleView(mTitleTextView)//這句話綁定View
.setOnSubjectBindViewListener(this)//這句話實(shí)現(xiàn)接口,在接口中定義規(guī)則
.setOnSubjectItemClickListener(this)
.setOnSubjectItemLongClickListener(this)
.showTimetableView();
@Override
public void onBindTitleView(TextView titleTextView, int curWeek, String curTerm, List subjectBeans) {
String text = "第" + curWeek + "周" + ",共" + subjectBeans.size() + "門(mén)課";
//填充
titleTextView.setText(text);
//同步當(dāng)前周次
this.curWeek=curWeek;
}
注意的地方
1.在調(diào)用showTimetableView()后需要調(diào)用一次changeWeek(),因?yàn)槲以趕howTimetableView()里沒(méi)有處理課程重疊的問(wèn)題,當(dāng)課程重疊或者有交叉且該課程在本周上時(shí),會(huì)在課程的右上方義小紅點(diǎn)+數(shù)字的形式提示。
2.紅點(diǎn)的出現(xiàn)時(shí)機(jī):在同一時(shí)刻且在本周有課的課程數(shù)大于等于2時(shí)
3.歡迎start、watch、fork,有問(wèn)題可以聯(lián)系我1193600556@qq.com
總結(jié)
以上是生活随笔為你收集整理的php模拟超级课程表,一个功能完善、UI简洁的仿超级课程表的课表控件 TimetableView...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 求一首歌,只记得歌词!天涯大人们,求助!
- 下一篇: 这样一台钛镁合金的自动售水机前期投入多少