Android 自定义实现日历

  • 开发工具AndroidStudio,使用组件GridView
    • 实现步骤以及原理
    • 具体实现

开发工具AndroidStudio,使用组件GridView

实现步骤以及原理

  1. 通过Calendar获取当前年月日
  2. 获取指定年月的天数
  3. 得到当月一号是星期几
  4. 获取日期对象的列表数据:当月天数加上当月1号星期几之前的空白数据(比如1号是星期3,那么日期列表数据之前添加三个数据)
  5. 设置GridView的适配器

具体实现

  1. 用Calendar对象获取日期
    Calendar calendar = Calendar.getInstance(); currYear = calendar.get(Calendar.YEAR); currMouth = calendar.get(Calendar.MONTH);
  2. 获取对应年月的天数
      private int getMonthLastDay(int year, int month) {Calendar a = Calendar.getInstance();a.set(Calendar.YEAR, year);a.set(Calendar.MONTH, month - 1);a.set(Calendar.DATE, 1);//把日期设置为当月第一天a.roll(Calendar.DATE, -1);//日期回滚一天,也就是最后一天return a.get(Calendar.DATE);
    }
    
  3. 一号是星期几
     Calendar calendar = Calendar.getInstance();int currYear = calendar.get(Calendar.YEAR);int currMouth = calendar.get(Calendar.MONTH) + 1;int currDay = calendar.get(Calendar.DAY_OF_MONTH);calendar.set(year, mouth - 1, 0);int i1 = calendar.get(Calendar.DAY_OF_WEEK);//这就是星期几
  1. 得到日期数据列表
 public void requestData() {last_state = 0;state_count = 0;ArrayList<DateInfo> datas = new ArrayList<>();Calendar calendar = Calendar.getInstance();int currYear = calendar.get(Calendar.YEAR);int currMouth = calendar.get(Calendar.MONTH) + 1;int currDay = calendar.get(Calendar.DAY_OF_MONTH);calendar.set(year, mouth - 1, 0);int i1 = calendar.get(Calendar.DAY_OF_WEEK);if (i1 > 6)//如果大于6天,也就是一个星期的天数,就不用添加,否则显示一行空白i1 = 0;for (int i = 0; i < i1; i++) {datas.add(new DateInfo(true));}for (int i = 0; i < getMonthLastDay(year, mouth); i++) {DateInfo data = new DateInfo(year, mouth, i + 1);if (currYear == year && currMouth == mouth && currDay == i + 1)data.setToday(true);data.setState(new Random().nextInt(4));//设置这一天的状态的if (last_state == 0) {last_state = data.getState();state_count = 1;} else if (last_state == data.getState()) {++state_count;datas.get(i + i1 - 1).setState_count(state_count);data.setState_count(state_count);} else {last_state = data.getState();state_count = 1;}datas.add(data);}}
  1. 最后继承自BaseAdapter,设置GridView的适配器

Android 自定义实现日历相关推荐

  1. android日历价格控件,Android 自定义价格日历控件

    介绍 上个星期项目有一个日历价格的需求,类似一个商品在不同的日期价格可能会不同,由于时间给得特别紧所以打算找个合适的开源项目进行修改.参考了网上大多数是通过继承view直接draw一个monthVie ...

  2. android 自定义周日历,CalendarView

    CalenderView Android上一个非常优雅.高度自定义.性能高效的日历控件,完美支持周视图,支持标记.自定义颜色.农历等,任意控制月视图显示.任意日期拦截条件.自定义周起始等.Canvas ...

  3. Android自定义预定日历,并且显示阴历

    最近有需要用户可以通过日历选择时间去预定,并且还要显示阴历日期节日等的需求,找了很多相关的开源的也没有发现类似功能的,有的是只有公历日期没有阴历,有的带有阴历的代码又看不懂(有些一句注释都没有,看的我 ...

  4. 自定义日历控android,Android自定义日历Calender代码实现

    产品要做签到功能,签到功能要基于一个日历来进行,所以就根据 要求自定义了一个日历 自定义控件相信做android都知道: (1)首先创建一个类,继承一个容器类或者是一个控件 (2)然后就是你需要设置的 ...

  5. android自定义选年控件,Android精美日历控件CalendarView自定义使用完全解析

    项目github地址 此框架采用组合的方式,各个模块互相独立,可自由采用各种提供的控件组合,完全自定义自己需要的UI,周视图和月视图可通过简单自定义任意自由绘制,不怕美工提需求!!!下面教程将介绍如何 ...

  6. android日历编程,Android自定义日历Calender代码实现

    产品要做签到功能,签到功能要基于一个日历来进行,所以就根据 要求自定义了一个日历 自定义控件相信做android都知道: (1)首先创建一个类,继承一个容器类或者是一个控件 (2)然后就是你需要设置的 ...

  7. Android自定义View精品(CustomCalendar-定制日历控件)

    版权声明:本文为openXu原创文章[openXu的博客],未经博主允许不得以任何形式转载 目录: 文章目录 1.分析 2.自定义属性 3.onMeasure() 4.onDraw() ①.绘制月份 ...

  8. android+高仿+日历,Android开源的精美日历控件,热插拔设计的万能自定义UI

    UI框架应该逻辑与界面实现分离,该日历控件使用了热插拔的设计 ,简单几步即可实现你需要的UI效果,热插拔的思想是你提供你的实现,我提供我的插座接口,与自定义Behavior是一样的思想. 听说第一页无 ...

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

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

最新文章

  1. java list 拼音排序_java中实现List集合中对象元素按其属性的中文拼音排序
  2. loj6070【山东集训第一轮Day4】基因
  3. classpath环境变量
  4. 《白鹿原》金句摘抄(二)
  5. 工业交换机与光纤收发器的区别
  6. Unity(一)必然事件
  7. 在WIN7下硬盘安装XP双系统
  8. 用姓名字段统计人数_基于 Wide amp; Deep 网络和 TextCNN 的敏感字段识别
  9. 08-R包那么多,怎么才能快速找到自己需要的包呢?
  10. 原型 继承 原型链 闭包
  11. tensorflow官方中文文档(各种tf函数解释,看这一篇就够了)
  12. AutoJs 4.1.1 实战教程
  13. 阿里巴巴: 章文嵩评价左耳朵耗子
  14. 一步一步带你训练CTPN
  15. python导包问题解决方案(一字千金)
  16. gprs数据传输流程
  17. Tracup|拒绝低效办公,8个Tips让你芜湖起飞,工作效率MAX
  18. 航姿参考系统(AHRS)
  19. 部分库不支持32位系统archive报错:Undefined symbols for architecture armv7
  20. 《程序员的数学》三部曲

热门文章

  1. 著名ai换脸网站_AI如何从著名的死去艺术家那里删除新音乐
  2. Angular报注入错误,以及解决方式,$injector:unpr
  3. Angular报注入错误,以及解决方式..$injector:unpr]
  4. 鸿蒙桌面系统什么时候上线,鸿蒙OS全新PC桌面模式即将上线?回顾一下手机桌面系统的发展历程...
  5. IIC协议下的OLED屏幕的三种寻址方式
  6. java里面出生日期_java出生日期格式
  7. 微信公众平台开发最佳实践(第2版)
  8. java使用aspose将word,excel,ppt转pdf
  9. win7为什么打开桌面上的计算机很卡很慢,Win7电脑开机速度慢解决方法
  10. Seventh5: YAML syntax Ansible Playbook Ansible variables summaries and QQS | Cloud computing