侧边栏
https://github.com/zfman/TimetableView
一个开源的、完善的、简洁的课程表控件
在课程视图的左侧有一列是侧边栏,本节演示如何对侧边栏的属性进行配置以及自定义侧边栏的步骤
准备
添加控件
<com.zhuangfei.timetable.TimetableView
android:id="@+id/id_timetableView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.zhuangfei.timetable.TimetableView>
获取控件
mTimetableView = findViewById(R.id.id_timetableView);
List<MySubject> mySubjects = SubjectRepertory.loadDefaultSubjects();
mTimetableView.setSource(mySubjects)
.setCurWeek(1)
.showView();
节次时间相关
显示时间
/**
* 显示时间
* 设置侧边栏构建监听,TimeSlideAdapter是控件实现的可显示时间的侧边栏
* 只修改了侧边栏的属性,所以只更新侧边栏即可(性能高),没有必要更新全部(性能低)
* @see TimeSlideAdapter
*/
protected void showTime() {
String[] times = new String[]{
"8:00", "9:00", "10:10", "11:00",
"15:00", "16:00", "17:00", "18:00",
"19:30", "20:30","21:30","22:30"
};
TimeSlideAdapter slideAdapter = new TimeSlideAdapter();
slideAdapter.setTimes(times);
mTimetableView.getScheduleManager().setOnSlideBuildListener(slideAdapter);
mTimetableView.updateSlideView();
}
隐藏时间
/**
* 隐藏时间
* 将侧边栏监听置Null后,会默认使用默认的构建方法,即不显示时间
* 只修改了侧边栏的属性,所以只更新侧边栏即可(性能高),没有必要更新全部(性能低)
*/
protected void hideTime() {
mTimetableView.getScheduleManager().setOnSlideBuildListener(null);
mTimetableView.updateSlideView();
}
侧边栏背景相关
修改侧边栏背景
/**
* 修改侧边栏背景
* 使用new的方式会覆盖掉之前设置的侧边栏的属性值
* 如果不想覆盖,可以这样:
* TimeSlideAdapter adapter= (TimeSlideAdapter) mTimetableView.getScheduleManager()
* .getOnSlideBuildListener();
* 使用该方式获取到控件的TimeSlideAdapter对象,对其设置属性即可
*
* 在类型强制类型转换之前,你应该调用过以下代码:
* TimeSlideAdapter slideAdapter = new TimeSlideAdapter();
* mTimetableView.getScheduleManager().setOnSlideBuildListener(slideAdapter);
*
* 否则在类型转换时会出现异常,请注意
*
* @param color
*/
protected void modifySlideBgColor(int color){
TimeSlideAdapter slideAdapter = new TimeSlideAdapter();
slideAdapter.setBackground(color);
mTimetableView.getScheduleManager().setOnSlideBuildListener(slideAdapter);
mTimetableView.updateSlideView();
}
修改侧边项背景
/**
* 修改侧边项背景
* @param color
*/
protected void modifyItemBgColor(int color){
TimeSlideAdapter slideAdapter = new TimeSlideAdapter();
slideAdapter.setItemBackground(color);
mTimetableView.getScheduleManager().setOnSlideBuildListener(slideAdapter);
mTimetableView.updateSlideView();
}
侧边栏文本相关
修改节次文本颜色
/**
* 修改侧边栏节次文本的颜色值
* @param color
*/
protected void modifyItemTextColor(int color){
TimeSlideAdapter slideAdapter = new TimeSlideAdapter();
slideAdapter.setTextColor(color);
mTimetableView.getScheduleManager().setOnSlideBuildListener(slideAdapter);
mTimetableView.updateSlideView();
}
修改时间文本颜色
/**
* 修改侧边栏时间文本的颜色值
* @param color
*/
protected void modifyItemTimeColor(int color){
String[] times = new String[]{
"8:00", "9:00", "10:10", "11:00",
"15:00", "16:00", "17:00", "18:00",
"19:30", "20:30","21:30","22:30"
};
TimeSlideAdapter slideAdapter = new TimeSlideAdapter();
slideAdapter.setTimes(times).setTimeTextColor(color);
mTimetableView.getScheduleManager().setOnSlideBuildListener(slideAdapter);
mTimetableView.updateSlideView();
}
自定义侧边栏
Step1:创建布局
创建一个XML文件item_custom_slide.xml
,该文件的内容可完全自定义
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:textColor="@color/app_qing2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="top|center_horizontal"
android:id="@+id/item_slide_textview"/>
</LinearLayout>
Step2:设置监听
需要实现ISchedule.OnSlideBuildListener
中的三个方法:
- setBackground(LinearLayout layout) 用于设置侧边项的背景色,参数为侧边项的View
- getSlideItemSize() 返回侧边项的个数
- onBuildSlideItem() 构建侧边项的过程,返回的View是一个侧边项
重点在第三个方法上,它决定了侧边项是如何构建的
/**
* 自定义侧边栏效果
* 使用自定义的布局文件实现的文字居顶部的效果(默认居中)
*/
protected void customSlideView(){
mTimetableView.getScheduleManager()
.setOnSlideBuildListener(new ISchedule.OnSlideBuildListener() {
@Override
public void setBackground(LinearLayout layout) {
//暂时不需要关注
}
@Override
public int getSlideItemSize() {
//返回侧边栏的Size
return 12;
}
@Override
public View onBuildSlideItem(int pos, LayoutInflater inflater, int itemHeight, int marTop) {
//获取View并返回,注意设置marTop值
View v=inflater.inflate(R.layout.item_custom_slide,null,false);
TextView tv=v.findViewById(R.id.item_slide_textview);
LinearLayout.LayoutParams lp=new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
itemHeight);
lp.setMargins(0,marTop,0,0);
tv.setLayoutParams(lp);
tv.setText((pos+1)+"");
return v;
}
});
mTimetableView.updateSlideView();
}
侧边栏效果重置
/**
* 取消自定义的侧边栏,回到默认状态
* 只需要将监听器置空即可
*/
protected void cancelCustomSlideView(){
mTimetableView.getScheduleManager().setOnSlideBuildListener(null);
mTimetableView.updateSlideView();
}