最近一直在未没有女票的事发愁。又赶上要做新APP,过产品稿时,我也心不在焉。讲到日历的时候,产品说听下技术的建议,日历是做成高度随内容变化的,还是高度固定内容变化的,我没有做过自定义日历,不知道里面的道道,然后其他同事都说高度固定的好做,结果就定下来了。结果分任务的时候,嚷嚷着好做的同事谁都没接,分给了我(当时我以为是照顾我这个小菜鸟,感动的差点哭一鼻子),结果网上搜了一圈,老哥没有啊。高度变化的好看又好用,即使是固定高度的,也是显示6行,4行时两行置灰(5行时置灰一行),此时我才感觉是不是各位老哥在给我挖坑,因为听说简单,要了一天的时间(当时还高兴,又能待半天)。哎,我绝对不会承认我加班的事的,真的,这辈子也不能加班啊。 撤了半天,都没说点正事。OK,先直接上产品稿和设计图,有相似功能的小伙伴们先看看产品稿和设计图是不是有点相似,如果差别不大,那接下来的就对你有帮助了。 产品稿



<!--过去的时间字体颜色-->
<color name="yesterday">#ff222222</color>
<!--将来的时间字体颜色-->
<color name="tomorrow">#ff999999</color>
<!--当前日期字体颜色,选中-->
<color name="today_select">#fff</color>
<!--当前日期字体颜色,未选中-->
<color name="today_unselected">#ffff6600</color>
<!--圆圈的颜色-->
<color name="round">#FFFF6600</color>
<!--农历月份字体颜色,因为这里没有用所以设置为了透明-->
<color name="month_lunar">#0000</color>
2、在Constant中配置 public static final int MONTHLUNAR=5;//农历字体大小
public static final float DOT=4f;//圆点标记的半径
public static final boolean ROUND_SQUARE=true;//圆形标记 true 方形标记 false
public static final float ROUND=32.0f;//圆圈标记的半径
public static final float OFFSET=16f;//圆圈标记的向上偏移量
public static final float FOUR=50f;//4行时,item的高度
public static final float FIVE=45f;//5行时,item的高度
public static final float SIX=37f;//6行时,item的高度
3、在activity中添加小圆点(可以请求数据后添加,可多次设置,但只显示最后的结果,不会叠加)
protected void initData() {
final List<Calendar> schemes = new ArrayList<>();
final int year = mCalendarView.getCurYear();
final int month = mCalendarView.getCurMonth();
//参数分别表示,年,月,日,颜色,事件(这里事件没有绘制)
schemes.add(getSchemeCalendar(year, month, 3, 0xffd5d5d5, "课"));
schemes.add(getSchemeCalendar(year, month, 6, 0xffd5d5d5, "课"));
schemes.add(getSchemeCalendar(year, month, 9, 0xffd5d5d5, "课"));
mCalendarView.setSchemeDate(schemes);
}
private Calendar getSchemeCalendar(int year, int month, int day, int color, String text) {
Calendar calendar = new Calendar();
calendar.setYear(year);
calendar.setMonth(month);
calendar.setDay(day);
calendar.setSchemeColor(color);//如果单独标记颜色、则会使用这个颜色
calendar.setScheme(text);
return calendar;
}
4、到这里基本够用了(如果还需要其他功能,那只能自己动手丰衣足食了),估计你肯定会说“你TM也没说如何实现的啊,信不信我打死你”。但是我想,我说半天怎么用的要是不上代码你还是会打死我吧?所有我决定不说实现直接上GitHub地址(代码不多,自己看咯) 代码下载地址:https://github.com/lpl0129/calendarview 5、非常重要 强烈推荐自定义日历控件CalendarView,因为我借鉴和使用了很多项目代码。 https://github.com/huanghaibin-dev/CalendarView 同时附上一篇介绍CalendarView如何使用的博客 https://blog.csdn.net/huanghaibin_dev/article/details/79040147