看到本篇文章的同学估计也是实验课或者项目需求中需要一个日历表,当我接到这个需求的时候,当时脑子压根连想都没想,这么通用的控件,GitHub上一搜一大堆不是嘛。可是等到真正做起来的时候,扎心了老铁,GitHub上的大神居然异常的不给力,都是实现了基本功能,能够滑动切换月份,找实现了周月切换功能的开源库很难。终于我费尽千辛万苦找到一个能够完美切换的项目时,你周月切换之后的数据乱的一塌糊涂啊!!!

算了,自己撸一个!!!

如果你感觉到对你有帮助,欢迎star

如果你感觉对代码有疑惑,或者需要修改的地方,欢迎issue

主要特性

日历样式完全自定义,拓展性强

左右滑动切换上下周月,上下滑动切换周月模式

抽屉式周月切换效果

标记指定日期(marker)

跳转到指定日期

思路

使用方法

XML布局

新建XML布局

RecyclerView的layout_behavior为com.ldf.calendar.behavior.RecyclerViewBehavior

android:id="@+id/content"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_weight="1">

android:id="@+id/calendar_view"

android:layout_width="match_parent"

android:layout_height="300dp"

android:background="#fff">

android:id="@+id/list"

android:layout_width="match_parent"

android:layout_height="wrap_content"

app:layout_behavior="com.ldf.calendar.behavior.RecyclerViewBehavior"

android:background="#c2c2c2"

android:layout_gravity="bottom"/>

自定义日历样式

新建CustomDayView继承自DayView并重写refreshContent 和 copy 两个方法

@Override

public void refreshContent() {

//你的代码 你可以在这里定义你的显示规则

super.refreshContent();

}

@Override

public IDayRenderer copy() {

return new CustomDayView(context , layoutResource);

}

新建CustomDayView实例,并作为参数构建CalendarViewAdapter

CustomDayView customDayView = new CustomDayView(context, R.layout.custom_day);

calendarAdapter = new CalendarViewAdapter(

context,

onSelectDateListener,

CalendarAttr.CalendarType.MONTH,

CalendarAttr.WeekArrayType.Monday,

customDayView);

初始化View

目前来看 相比于Dialog选择日历 我的控件更适合于Activity/Fragment在Activity的onCreate 或者Fragment的onCreateView 你需要实现这两个方法来启动日历并装填进数据

@Override

protected void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_syllabus);

initCalendarView();

}

private void initCalendarView() {

initListener();

CustomDayView customDayView = new CustomDayView(context, R.layout.custom_day);

calendarAdapter = new CalendarViewAdapter(

context,

onSelectDateListener,

CalendarAttr.CalendarType.MONTH,

CalendarAttr.WeekArrayType.Monday,

customDayView);

initMarkData();

initMonthPager();

}

使用此方法回调日历点击事件

private void initListener() {

onSelectDateListener = new OnSelectDateListener() {

@Override

public void onSelectDate(CalendarDate date) {

//your code

}

@Override

public void onSelectOtherMonth(int offset) {

//偏移量 -1表示上一个月 , 1表示下一个月

monthPager.selectOtherMonth(offset);

}

};

}

使用此方法初始化日历标记数据

private void initMarkData() {

HashMap markData = new HashMap<>();

//1表示红点,0表示灰点

markData.put("2017-8-9" , "1");

markData.put("2017-7-9" , "0");

markData.put("2017-6-9" , "1");

markData.put("2017-6-10" , "0");

calendarAdapter.setMarkData(markData);

}

使用此方法给MonthPager添加上相关监听

monthPager.addOnPageChangeListener(new MonthPager.OnPageChangeListener() {

@Override

public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

@Override

public void onPageSelected(int position) {

mCurrentPage = position;

currentCalendars = calendarAdapter.getAllItems();

if(currentCalendars.get(position % currentCalendars.size()) instanceof Calendar){

//you code

}

}

@Override

public void onPageScrollStateChanged(int state) {

}

});

重写onWindowFocusChanged方法,使用此方法得知calendar和day的尺寸

@Override

public void onWindowFocusChanged(boolean hasFocus) {

super.onWindowFocusChanged(hasFocus);

if(hasFocus && !initiated) {

CalendarDate today = new CalendarDate();

calendarAdapter.notifyDataChanged(today);

initiated = true;

}

}

大功告成,如果还不清晰,请下载DEMO

Download

Gradle:

Step 1. Add it in your root build.gradle at the end of repositories:

allprojects {

repositories {

...

maven { url 'https://www.jitpack.io' }

}

}

Step 2. Add the dependency

dependencies {

compile 'com.github.MagicMashRoom:SuperCalendar:1.6'

}

Licence

Copyright 2017 MagicMashRoom, Inc.

android 周月切换,SuperCalendar: @Deprecated android 自定义日历控件 支持左右无限滑动 周月切换 标记日期显示 自定义显示效果跳转到指定日期...相关推荐

  1. Android自定义日历控件,自带农历节假日,已经开源,即取即用~

    关注本人的更多博客:http://www.cnblogs.com/liushilin/ 该自定义日历控件已经开源:github地址 可能不少的小伙伴都有看楼主昨天发的自定义日历控件,虽然实现功能不多, ...

  2. android程序日历layout,Android使用GridLayout绘制自定义日历控件

    效果图 思路:就是先设置Gridlayout的行列数,然后往里面放置一定数目的自定义日历按钮控件,最后实现日历逻辑就可以了. 步骤: 第一步:自定义日历控件(初步) 第二步:实现自定义单个日期按钮控件 ...

  3. android+高仿+日历,android高仿钉钉和小米的自定义日历控件(支持阴历和阳历,左右无限翻页viewpager)...

    收藏 0 简介 这是一个高仿钉钉和小米的日历控件,支持快速滑动,界面缓存.想要定制化UI,使用起来非常简单,就像使用ListView一样 一些特点: 可以自定义日历控件UI 支持快速滑动 支持农历和阳 ...

  4. android高仿钉钉和小米的日历控件

    原文地址:http://www.jianshu.com/p/622fdded4dc9 简介 这是一个高仿钉钉和小米的日历控件,支持快速滑动,界面缓存.想要定制化UI,使用起来非常简单,就像使用List ...

  5. java自定义日历控件_【无私分享】修订版干货!!!一个炫酷的自定义日历控件,摆脱日历时间选择烦恼,纯福利~...

    可能不少的小伙伴都有看楼主昨天发的自定义日历控件,虽然实现功能不多,但也还算将就吧. 但是看了的小伙伴就很心急了,说楼主上传到gitHub的东西有问题,楼主下载来看了看,基本都没问题吧,没弄好的小伙伴 ...

  6. 【无私分享】修订版干货!!!一个炫酷的自定义日历控件,摆脱日历时间选择烦恼,纯福利~...

    可能不少的小伙伴都有看楼主昨天发的自定义日历控件,虽然实现功能不多,但也还算将就吧. 没有看的小伙伴如果有兴趣的话可以去看看:http://www.cnblogs.com/liushilin/p/57 ...

  7. 自定义日历控件,可以根据需求定制属于自己的日历

    自定义日历控件,可以根据需求定制属于自己的日历 效果图 最近笔者的朋友需要写一个关于考勤的日历,效果如下,但在网上找了半天都找不到合适的,于是乎就向笔者求助,笔者本来觉得在晚上随便找个日历demo,然 ...

  8. 自定义日历控件背景样式

    #自定义日历控件的使用 一.DatePicker日期选择类的使用 DatePicker常用xml属性: XML属性 描述 android:calendarViewShown 设置该日期选择是否显示Ca ...

  9. 【无私分享】干货!!!一个炫酷的自定义日历控件,摆脱日历时间选择烦恼,纯福利~...

    最近公司项目中有一个按日期查看信息的功能,楼主本想用之前用的wheelView将就使用的,不过产品经理有个新要求,就是点击按钮弹出的日期选择对话框必须显示农历节假日,周几什么的.这可就难为人了,倘若使 ...

  10. Calendar 自定义日历控件

    CalendarView 介绍 代码地址:https://github.com/09xuanjian/CalendarView 这是一个日历控件,很多时候我们需要把一些信息通过时间戳的方式展示给用户. ...

最新文章

  1. Xamarin.Forms XAML控件的公共属性
  2. Spring-基于Spring使用自定义注解及Aspect实现数据库切换
  3. Android Studio——[Missing essential plugin: org.jetbrains.android ...]解决方案
  4. 计算机编程语言的分类,解释型语言、编译型语言、脚本语言的区别
  5. 40万亿“新基建”来了!程序员的新翻身机会终于也来了!
  6. Sparrow - Distributed, Low Latency Scheduling
  7. o'LogonUI Changer XP登陆界面更换器
  8. 计算机科学与技术毕业论文题目【115个】
  9. CoreOS部署及应用
  10. 反应釜cad图_反应罐系列图(5张图)CAD格式
  11. html的url中写什么意思,html中url指的是什么意思
  12. LTE中的SRB--承载
  13. java商城功能模块图_java网上图书商城(1)User模块
  14. Shadow Defender 版本: 1.1.0.331注册码
  15. 企业中流砥柱:别让企业中层缺位
  16. 如何修改mind map pro 的快捷键 how to edit shortcut of mind map pro
  17. mysql的乐观锁,悲观锁(共享锁,排斥锁)
  18. Redis—列表(List)、集合(Set)、哈希(Hash)、有序集合 Zset
  19. 震惊!!!某教育机构一男性教师讲课流程曝光!!! 内容→变量和数据类型
  20. 不愧是阿里P8!mysql8安装初始化错误

热门文章

  1. excel高级筛选怎么用_Excel高级筛选教程(完整版)-第二期注入灵魂的条件区域
  2. chrome突然无法复制粘贴了
  3. python版问答聚合采集工具源代码+反编译完美还原
  4. react--划分Reducer
  5. Java 基于JavaMail实现向QQ邮箱发送邮件
  6. canvas实现动态矩形碰撞
  7. Sound Of Firmware 学习 (一) 注册SOF
  8. php实现阳历阴历互转的方法
  9. 531 孤独像素 I
  10. 2017(第六届)国际智慧城市峰会暨智慧城市新科技博览会在沪召开