全网第二好的Android课程表控件之侧边栏

侧边栏

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();
    }

上一篇:全网第二好的Android课程表控件之日期栏
下一篇:全网第二好的Android课程表控件之课程项样式

猜你喜欢

转载自blog.csdn.net/lzhuangfei/article/details/80744503