最近的小项目中要使用日历控件选择日期,折腾了好久,几次尝试加入别人写的成品,但问题很多。一方面因为自己初学Android,对其机制不够了解,另一方面因为自己太懒,看不进别人的代码,不想做太大的改动,调不好又容易放弃。

最开始使用Android自有的CalendarView控件,遇到的问题主要是日期往下或往上滑动后页面自动关闭了,不大理解;最严重的是只支持API 11以上的版本,在3.0一下的版本中直接崩溃。后来参照文章http://www.cnblogs.com/hanyonglu/archive/2012/03/26/2418178.html,采用推荐的第一种,也是使用最广泛的一种CalendarView,个人水平有限,移植了好久才调通,但界面排版出现严重的问题,估计是dimens.xml一直有些问题,调不好。又相继试过好几个Demos后,都出现莫名其妙的问题,初学者的痛啊!

刚才终于搞定了日历,采用的是那篇博文作者自己实现的日历MyCalendarDemo。简要说明下自己的移植流程:

首先将原demo中的MainActivity类改名,不然可能和自己的文件重名,比如改为CalendarAcitivity,相关的地方都改一下,包括包中另外两个文件调用的位置,以及文件名和Manifest中的Activity注册。将整个包拷进自己的项目中,注意在Manifest中的注册路径也要改,加上位置“com.calendar.demo”。

将其他相关文件拷贝到自己项目的对应资源目录中,包括next_month.png,previous_month.png,calendar_main.xml,main.xml,colors.xml以及几个string资源。注意更新一下R文件,搞不定就清理一下,导入自己的R文件目录。

我的目的是在点击日历按钮或菜单后调出日历界面,在界面上点击某个日期后返回选择的日期,再关闭日历,所以要在源代码上做一些修改。描述如下:

假定将原Demo的MainActivity改成了CalendarActivity,则要调用的时候在按钮或菜单响应中加入代码:

 Intent intent = new Intent(MainActivity.this, CalendarActivity.class);MainActivity.this.startActivityForResult(intent, 100);

同时修改CalendarAcitivity中的点击日历日期后的响应函数DateWidgetDayCell.OnItemClick。改写为:

 // 点击日历,触发事件private DateWidgetDayCell.OnItemClick mOnDayCellClick = new DateWidgetDayCell.OnItemClick() {public void OnClick(DateWidgetDayCell item) {calSelected.setTimeInMillis(item.getDate().getTimeInMillis());
//          int day = GetNumFromDate(calSelected, startDate);//本项目暂时不使用数据记录,因而把这段注释了
//          if (calendar_Hashtable != null
//                  && calendar_Hashtable.containsKey(day)) {
//              arrange_text.setText(Calendar_Source.get(calendar_Hashtable
//                      .get(day)));
//          } else {
//              arrange_text.setText("暂无数据记录");
//          }item.setSelected(true);int year = calSelected.get(Calendar.YEAR);int month = calSelected.get(Calendar.MONTH);int dayOfMonth = calSelected.get(Calendar.DAY_OF_MONTH);Intent data = new Intent();data.putExtra("year", year);data.putExtra("month", month);data.putExtra("day", dayOfMonth);setResult(20, data);updateCalendar();CalendarDispActivity.this.finish();}};

然后在自己的项目中需要接收日历选择日期返回响应的页面中重写方法onActivityResult:

 //获得从日历控件得到的日期@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {if(resultCode==20) {int year = data.getIntExtra("year", 0);int month = data.getIntExtra("month", 0);int day = data.getIntExtra("day", 0);Calendar dat = Calendar.getInstance();//获得当前时间,可能没必要dat.set(Calendar.YEAR, year);dat.set(Calendar.MONTH, month);dat.set(Calendar.DAY_OF_MONTH, day);Toast.makeText(MainActivity.this, ""+year+"年"+month+"月"+day+"日", Toast.LENGTH_SHORT).show();}};

在这里就可以接收到日历控件传过来的日期。

建议更改一下原作者Demo中日历翻页的两个按钮图片,太小了不容易按到,开始还以为是响应慢。

本文没什么技术,只是对自己日历控件完成的一个小结。

Android日历移植小结相关推荐

  1. Android系统移植与调试之-------如何修改Android设备添加重启、飞行模式、静音模式等功能(一)...

    1.首先先来看一下修改前后的效果对比图 修改之后的图片 确认重启界面 具体的修改内容在下一篇中具体介绍. Android系统移植与调试之------->如何修改Android设备添加重启.飞行模 ...

  2. 在android上移植ios

    2019独角兽企业重金招聘Python工程师标准>>> Android与IOS是最受人们欢迎的两大移动平台,Android与IOS之争是一个永久的话题.接下来笔者就结合自己的知识和网 ...

  3. 日历控件的android代码,Android日历控件PickTime代码实例

    Android日历控件PickTime代码实例 发布时间:2020-10-03 16:05:51 来源:脚本之家 阅读:86 作者:手撕高达的村长 最近做项目,需要设置用户的生日,所以做这样一个功能. ...

  4. android 本地日历,Android日历提供商:如何删除自己的本地日历?

    我正在学习如何使用Android日历.到目前为止,我能够显示有关现有日历的信息.我也可以创建自己的本地日历 - 测试代码如下: private void createCalendarTest() { ...

  5. Android技能树 — 网络小结(6)之 OkHttp超超超超超超超详细解析

    前言: 本文也做了一次标题党,哈哈,其实写的还是很水,各位原谅我O(∩_∩)O. 介于自己的网络方面知识烂的一塌糊涂,所以准备写相关网络的文章,但是考虑全部写在一篇太长了,所以分开写,希望大家能仔细看 ...

  6. android expandablelistview横向,Android ExpandableListView使用小结(二)

    在上一篇Android ExpandableListView使用小结(一)的介绍中,我们学习了 ExpandableListView 的使用方法,学习了自定义适配器,为列表选项设置监听事件.想必大家都 ...

  7. 详细介绍android rom移植知识普及

    详细介绍android rom移植知识普及 最近接到很多兄弟们的求助,也回答过无数个和下面这个问题类似的问题: 如何编译android 原生代码得到一个rom,然后跑到某某手机上. 鉴于很多兄弟对这块 ...

  8. android 日历_适用于Android的十大最佳日历应用

    android 日历 Looking for the best calendar apps for Android? You're in the right place! Let's get righ ...

  9. Android日历视图

    In this tutorial, we'll be discussing the Calendar Widget using the CalendarView class in our Androi ...

最新文章

  1. vue树形多列_[vue]使用Element-ui的el-table实现多列同时排序。
  2. 第六章---机器学习与数据建模
  3. Android多点触控MultiTouch浅析
  4. 节能原理 复习(能量平衡+热电联产+联合循环)
  5. [唐诗]189长相思-李白
  6. abp mysql .net core_ABP Asp.Net Core 集成 MySql 数据库
  7. LeetCode 232. Implement Queue using Stacks
  8. R语言︱R社区的简单解析(CRAN、CRAN Task View)
  9. Tensorflow自编码器及多层感知机
  10. UserWarning: Error checking compiler version for cl
  11. 假如我是一个项目总监/经理 From CSDN
  12. C# winFrom 自定义gridview样式制作好看的大屏显示队列
  13. OpenCV 之 角点检测
  14. 自己写jquery表单验证
  15. Java软件工程师职位分析
  16. 根据表达式序列(前缀、中缀、后缀)构建表达式树
  17. jquery触屏幻灯片
  18. Exchange 2013管理员账号登录ecp登陆不了
  19. RBCM-PDA-CUR@PLGA红细胞膜包裹聚多巴胺涂覆PLGA/细胞膜包覆纳米拓扑结构阵列
  20. 企业如何使用商业智能(BI)进行数据赋能?

热门文章

  1. 射频功率计SCPI二次开发程控软件
  2. 核心交换机链路聚合、冗余、堆叠、热备份
  3. 集成电路ic是什么?
  4. r语言显示找不到read_html,R语言中read.table函数不常见的用法-文本中有#注释符号...
  5. 说说Linux的用途
  6. compareAndSet
  7. 如何用c语言编写发邮件程序,想学C语言发邮件程序?5分钟教会你:附送源码+教学!...
  8. 华为视频会议终端TE40配置
  9. 生成与获取token
  10. SpringMVC从基础到源码