基于安卓的手机日历管理系统毕业论文.doc_第1页
基于安卓的手机日历管理系统毕业论文.doc_第2页
基于安卓的手机日历管理系统毕业论文.doc_第3页
基于安卓的手机日历管理系统毕业论文.doc_第4页
基于安卓的手机日历管理系统毕业论文.doc_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于安卓的手机日历管理系统毕业论文目 录摘 要2Abstract3目 录4第一章 绪论71.1 课题背景71.2 安卓平台简介81.2.1 安卓平台特色介绍81.2.2 安卓系统编程语言91.3 安卓开发的现状9第二章 系统开发环境与相关技术102.1 系统开发的环境102.2 系统开发软件的简介102.2.1 Eclipse的简介102.2.2其他软件的简介112.3安卓环境的搭建112.3.1 软件下载准备112.3.2 JDK安装112.3.3 Android SDK安装122.3.4 ADT安装132.3.5 创建AVD132.4 系统开发编程语言的简介14第三章 系统需求分析及概要设计163.1 系统的需求分析163.2 系统的概要设计163.2.1 系统的功能模块说明163.2.2 系统的功能模块结构图16第四章 系统的详细设计194.1 系统主界面的设计和实现194.1.1 系统主界面的头部菜单栏194.1.2 系统的日历界面204.1.2 系统的日历特色显示224.2 系统任务界面的设计234.2.1 任务界面的数据库准备234.2.2 任务界面之新增界面264.2.3 任务界面之总日程界面334.2.3 任务界面之单一日程界面354.2.4 任务界面之实现对已有日程日期的标记364.3 系统设置界面374.4 系统关于界面384.5 系统底部菜单项384.5.1 日历界面使用的底部菜单项394.5.2 其他界面使用的底部菜单项设计与实现414.6 农历算法42第五章 程序测试465.1 安卓测试概述465.2 功能性测试47以上测试均为真机测试,并且有录制详细的操作视频475.3 稳定性测试475.4 测试结果48结束语49参考文献51致谢52第一章 绪论1.1 课题背景当今社会是信息社会,人们无论何时、无论何地都是在与信息打交道,您阅读的报纸是信息、看到的广告是信息、电视传播的是信息、上网浏览的是信息,当代人简直生活在“信息海洋”中。这么多的信息哪些是有用的,哪些是无用的,人们在信息丰富的社会中,难免会忘记一些重要信息,有时会掉一个寻呼机,有时会掉一个电话本或笔记本什么的,这些“信息载体”也许包含着重要的个人信息。如何将这些有用的信息存储起来避免忘记或丢失,如何对这些有用信息进行有序地组织、管理以资对生活决策提供帮助,这正是信息管理软件要解决的问题。进入21世纪以来,无所不在的计算将打破传统意义上的计算机概念:使用更方便、移动更容易、功能更多样化的各种具有计算机功能的设备大量出现,并且在需要时,可以随时通过无线方式连接到移动数据通信网络中,以便高效地交换信息和获得各种服务。这种设备人们称之为无限设备(Mobile Device)。移动设备最根本的特征是移动性,即能够利用无线电波、微波或红外线等传输介质允许通信中的设备在一定范围内自由移动,其位置不受束缚,从而实现通信双方至少有一方在移动中进行信息传输和交换的目的。移动设备从产生到现在的历史并不长,然而其发展速度却远远超出人们的预料。现如今,移动设备大行其道,全球有超过十亿部移动电话正在被使用,并且这个数目正在逐渐增加。在除美国之外的每个发达国家,拥有手机的人数比拥有计算机的人数更多。而目前,随着移动设备越来越普及及移动硬件的提升,移动设备的功能越来越完善,移动设备的系统平台也日渐火热起来。目前国内最常见的移动开发平台有Symbian,iPhone,Windows Phone 以及Android。如今国内外都有非常多的Android 系统的用户。自从2011年第一季度,Android在全球份额首次超过Symbian,跃居全球第一。截止2012年2月据,Android占据全球智能手机操作系统市场52.5%的份额,中国市场占有率为68.4%。考虑到如今手机系统的发展现状,以及Android平台系统自身所拥有的优势。因此,基于安卓平台开发一款手机应用软件具有较大的意义和可行性。1.2 安卓平台简介Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。目前,最新版本为Android 4.0 Ice Cream Sandwich (冰激凌三明治) 以及还在测试中的Android 5.0Jelly Bean(果冻豆)。1.2.1 安卓平台特色介绍1.开放性在优势方面,Android平台首先就是其开放性,开放的平台允许任何移动终端厂商加入到Android联盟中来。显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很快走向成熟。开发性对于Android的发展而言,有利于积累人气,这里的人气包括消费者和厂商,而对于消费者来讲,最大的受益正是丰富的软件资源。开放的平台也会带来更大竞争,如此一来,消费者将可以用更低的价位购得心仪的手机。2.挣脱运营商的束缚在过去很长的一段时间,特别是在欧美地区,手机应用往往受到运营商制约,使用什么功能接入什么网络,几乎都受到运营商的控制。自从iPhone上市,用户可以更加方便地连接网络,运营商的制约减少。随着EDGE、HSDPA这些2G至3G移动网络的逐步过渡和提升,手机随意接入网络已不是运营商口中的笑谈。3.丰富的硬件选择这一点还是与Android平台的开放性相关,由于Android的开放性,众多的厂商会推出千奇百怪,功能特色各具的多种产品。功能上的差异和特色,却不会影响到数据同步、甚至软件的兼容。好比你从诺基亚Symbian风格手机一下改用苹果iPhone,同时还可将Symbian中优秀的软件带到iPhone上使用、联系人等资料更是可以方便地转移。4.不受任何限制的开发商Android平台提供给第三方开发商一个十分宽泛、自由的环境。因此不会受到各种条条框框的阻扰,可想而知,会有多少新颖别致的软件会诞生。但也有其两面性,血腥、暴力、情色方面的程序和游戏如何控制正是留给Android难题之一。1.2.2 安卓系统编程语言 在Android中,开发者可以使用Java作为编程语言来开发应用程序,也可以通过NDK使用C/C+作为编程语言来开发应用程序,也可使用SL4A来使用其他各种脚本语言进行编程(如:python、lua、tcl、php等等),还有其他诸如:Qt(qt for android)、Mono(mono for android)等一些著名编程框架也开始支持Android编程,甚至通过MonoDroid,开发者还可以使用C#作为编程语言来开发应用程序。另外,谷歌还在2009年特别发布了针对初学者的Android Simple语言,该语言类似Basic语言。而在网页编程语言方面,JavaScript,ajax,HTML5,jquery、sencha、dojo、mobl、PhoneGap等等都已经支持Android开发。 在Android系统底层方面,Android使用C/C+作为开发语言。而Android应用层的开发,基本上全部是采用Java开发。但和我们一般互联网上应用的JAVA还是有些区别的。 此”JAVA是google自己做的一套实现来实现,和SUN的底层是不太一样的。不过对开发应用区别不大。1.3 安卓开发的现状目前国内的 Android 开发还是主要以应用开发为主,主要分成3类:为企业开发应用、开发通用应用(放到 Android Market或者其他App Market 销售)以及游戏开发(放到 Android Market 或者其他 App Market 销售)。第一类开发者一般身处规模较大的公司,这些公司主要为自有品牌或者其他品牌设计手机或者平板电脑的总体方案。除了根据需求对系统进行定制外,更多的工作在于为这些系统编写定制的应用。第二类开发者,一般处于创业型公司或者是独立开发者,他们的盈利方式主要是2种:为国外公司进行外包开发,或者通过Google 的移动广告(AdMob)通过广告点击分成。而理论上的通过付费下载的形式来盈利的,现在国内鲜见成功者。第三类开发者,目前和第二类开发者类似。下图是开发者提交的 应用和游戏的数目所占的比例图, 从中也可以看出应用开发数目远超游戏开发。第二章 系统开发环境与相关技术2.1 系统开发的环境Android 的上层应用程序是用Java 语言开发,同时还需要基于Dalvik虚拟机,所以,Google公司推荐使用主流的Java继承开发环境Eclipse。只有Eclipse还不够, 因为是使用 Java 语言进行开发, 还应该有由SUN公司提供的Java SDK(其中包括JRE:Java Runtime Environment)。此外,Android的应用程序开发和Java开发有较大区别的,所以还需要有Google提供的Android SDK。同时,还需要在 Eclipse安装ADT,为 Android开发提供开发工具的升级或者变更,是Eclipse 下开发工具的升级下载的工具。简言之,需要以下软件,才能搭建 Android 开发环境,从而进行Android应用程序的开发。(1) Eclipse (2) JDK(3) Android SDK(4) ADT(Android Development Tools)2.2 系统开发软件的简介2.2.1 Eclipse的简介Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。 虽然大多数用户很乐于将 Eclipse 当作 Java 集成开发环境(IDE)来使用,但 Eclipse 的目标却不仅限于此。Eclipse 还包括插件开发环境(Plug-in Development Environment,PDE),这个组件主要针对希望扩展 Eclipse 的软件开发人员,因为它允许他们构建与 Eclipse 环境无缝集成的工具。由于 Eclipse 中的每样东西都是插件,对于给 Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。 这种平等和一致性并不仅限于 Java 开发工具。尽管 Eclipse 是使用 Java 语言开发的,但它的用途并不限于 Java 语言;例如,支持诸如 C/C+ 和 COBOL 等编程语言的插件已经可用,或预计将会推出。Eclipse框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。2.2.2其他软件的简介(1)JDKJDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的Java SDK。JDK 是整个Java的核心,包括了Java运行环境,Java工具和Java基础的类库。JDK是学好Java的第一步。而专门运行在x86平台的Jrocket在服务端运行效率也要比Sun JDK好很多。从SUN的JDK5.0开始,提供了泛型等非常实用的功能,其版本也不断更新,运行效率得到了非常大的提高。(2) Android SDKSDK:(software development kit)软件开发工具包。被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。 因此,Android SDK 指的既是Android专属的软件开发工具包。(3)ADT(Android Development Tools)目前Android开发所用的开发工具是Eclipse,在Eclipse编译IDE环境中,安装ADT,为Android开发提供开发工具的升级或者变更,简单理解为在Eclipse下开发工具的升级下载工具。 2.3安卓环境的搭建2.3.1 软件下载准备分别下载 JDK、Eclipse、Android SDK,并首先解压Eclipse完成安装。2.3.2 JDK安装首先按提示完成SDK安装,然后设置环境变量(非必须)。1.我的电脑-属性-高级-环境变量-系统变量中添加以下环境变量: 2.JAVA_HOME值为:E:AndroidJavajdk1.6.0_21(我所安装JDK的目录) 3.CLASSPATH值:.;%JAVA_HOME%libtools.jar;%JAVA_HOME%libdt.jar;%JAVA_HOME%bin;4.Path:在开始追加 %JAVA_HOME%bin; 安装完成之后,检查JDK是否安装成功。打开cmd窗口,输入java version 查看JDK的版本信息。出现下面的画面表示安装成功了,如图2-1:图2-1 安卓环境设置JDK效果测试图2.3.3 Android SDK安装 下载完成后解压到任意路径(我的解压路径为E:Androidandroid-sdk-windows)运行SDK Setup.exe,点击Available Packages。 选择希望安装的SDK及其文档或者其它包,按需点击下面选项(开始下载安装所选包 )在用户变量中新建PATH值为:Android SDK中的tools绝对路径(本机为D:AndroidDevelopandroid-sdk-windowstools)。 完成按“确定”后,重新启动计算机。重启计算机以后,进入cmd命令窗口,检查SDK是不是安装成功。 运行 android h 出现以下的画面,表明安装成功,如图2-2:图2-2 安卓环境设置SDK效果测试图2.3.4 ADT安装打开 Eclipse,进入菜单中的 Help - Install New Software 点击Add.按钮,弹出对话框要求输入Name和Location:Name自己随便取,Location输入/android/eclipse。确定返回后,在work with后的下拉列表中选择我们刚才添加的ADT,点击下面出现的Developer Tools,展开它会有Android DDMS和Android Development Tool,勾选他们,然后按步骤完成。完成之后:选择Window Preferences. 在左边的面板选择Android,然后在右侧点击Browse.并选中SDK路径,本机为: E:Androidandroid-sdk-windows点击Apply。配置完成。 2.3.5 创建AVD为使Android应用程序可以在模拟器上运行,必须创建AVD。1、在Eclipse中。选择Windows Android SDK and AVD Manager 2、点击左侧面板的Virtual Devices,再右侧点击New 3、填入Name,选择Target的API,SD Card大小任意,Skin随便选,Hardware目前保持默认值 4、点击Create AVD即可完成创建AVD 综上一切完成后安卓环境搭建完成。2.4 系统开发编程语言的简介Java是一种简单的,跨平台的,面向对象的,分布式的,解释的,健壮的安全的,结构的中立的,可移植的,性能很优异的多线程的,动态的语言。Java 编程语言的风格十分接近C、C+语言。Java是一个纯的面向对象的程序设计语言,它继承了 C+ 语言面向对象技术的核心,Java舍弃了C +语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java SE 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现了“一次编译、到处执行”的跨平台特性。不过,每次的编译执行需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。但在 J2SE 1.4.2 发布后,Java 的执行速度有了大幅提升。与传统程序不同,Sun 公司在推出 Java 之际就将其作为一种开放的技术。全球数以万计的 Java 开发公司被要求所设计的 Java 软件必须相互兼容。“Java 语言靠群体的力量而非公司的力量”是 Sun 公司的口号之一,并获得了广大软件开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同。 Sun 公司对 Java 编程语言的解释是:Java 编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。 Java 平台是基于 Java 语言的平台。 Java的特点:1.平台无关性 平台无关性是指Java能运行于不同的平台。Java引进虚拟机 原理,并运行于虚拟机,实现不同平台的Java接口之间。使用Java编写的程序能在世界范围内共享。Java的数据类型与 机器无关,Java虚拟机(Java Virtual Machine)是建立在硬件和操作系统之上,实现Java二进制代码的解释执行功能, 提供于不同平台的接口的。 2.安全性 Java的编程类似C+,学习过C+的读者将很快掌握Java的精髓。Java舍弃了C+的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针侵入系统。Java对程序提供了安全管理器,防止程序的非法访问。 3.面向对象 Java吸取了C+面向对象的概念,将数据封装于类中,利用类的优点,实现了程序的简洁性和便于维护性。类的封装性、继承性等有关对象的特性,使程序代码只需一次编译,然后通过上述特性反复利用。程序员只需把主要精力用在类和接口的设计和应用上。Java提供了众多的一般对象的类,通过继承即可使用父类的方法。在Java中,类的继承关系是单一的非多重的,一个子类只有一个父类,子类的父类又有一个父类。Java提供的Object类及其子类的继承关系如同一棵倒立的树形,根类为Object类,Object类功能强大,经常会使用到它及其它派生的子类。 4.分布式 Java建立在扩展TCP/IP网络平台上。库函数提供了用HTTP和FTP协议传送和接受信息的方法。这使得程序员使用网络上的文件和使用本机文件一样容易。 5.健壮性 Java致力于检查程序在编译和运行时的错误。类型检查帮助检查出许多开发早期出现的错误。Java自己操纵内存减少了内存出错的可能性。Java还实现了真数组,避免了覆盖数据的可能,这些功能特征大大提高了开发Java应用程序的周期。并且Java还提供了Null指针检测、数组边界检测、异常出口、Byte code校验等功能。 6.解释型 我们知道C,C+等语言,都是针对CPU芯片进行编译,生成机器代码,该代码的运行就和特定的CPU有关。Java不像C或C+,它不针对CPU芯片进行编译,而是把程序编译成称为自字节码的一种“中间代码”。字节码是很接近机器码的文件,可以在提供了java虚拟机(JVM)的任何系统上被解释执行。 7.动态 java程序的基本组成单元就是类,有些类是自己编写的,有些是从类库中引入的,而类又是运行时动态装载的,这就使得Java可以在分部环境中动态的维护程序及分类,而不像C+那样,没档期类库升级以后,如果想让程序具有新类库提供的功能,就需要修改程序,重新编译。第三章 系统需求分析及概要设计3.1 系统的需求分析该系统是一个基于安卓平台的手机日程管理软件。它是为本软件的持有者提供日程管理方面服务的,它包括日历的查看、日历上日期对应日程的查看、总日程的查看、日程的增加、日程的删除、日程的修改、对本软件的设置以及软件相关信息的查看等。本软件有助于人们记住重要的日程并给予提醒,也有助于人们更好的调节自己的时间来减轻生活上的一些负担,更轻松及有效的过好每一天。3.2 系统的概要设计3.2.1 系统的功能模块说明(1)日历查看模块:拥有一个完整的日历界面,包括头部的年月日、生肖、闰年的显示,还有每个日期上都分别有阳历和阴历的日期显示,并且日历中包含了各个重要的节日或纪念日等。在日历界面上每个日期都会跳到当前日期的日程添加界面或者是日程显示界面。日历界面上还有对存在日程的标记,有利于人们更好的管理日程。(2)日程管理模块:在本模块中包括总的日程显示页面和日历页面所跳转到的日程显示界面或者是日程添加界面。总日程显示界面每一个日程都会有它所包含的日期、时间、日程类型、重复类型和日程内容。日历日期所对应的日程显示界面也是相应的显示。而在日程添加界面中包含了显示界面所对应的各项数据、添加日程成功后会有对应日历日期的标记。另外也有对日程的一系列管理操作的功能。(3)设置界面模块:在设置中包括了对日程的类型和重复类型的默认设置。(4)关于界面模块:关于界面中包含了本软件的设计信息及一些基本信息。3.2.2 系统的功能模块结构图在程序设计分析的基础上,结合实际情况,得出本程序的功能模块结构图。在结构图中包括了功能模块的表示及其中部分功能的实现原理。首先是一个总的功能模块的结构图,其中包括了系统设计时的总体功能概括,如图3-1。日程管理系统主界面日历模块任务模块设置模块关于模块日历显示总日程显示类型设置关于界面单一日程显示图3-1 总系统功能模块然后在总体的功能模块后面是主体功能的详细模块显示。在日历界面显示上可分为几个部分,详细见图3-2,日历模块日历模块日历模块日历显示阴历显示节假日显示日期显示图3-2 日历显示模块 还有就是日程的功能模块的详细介绍。总体书写了日程添加界面的功能点,结构图如图3-3所示,新建日程显示重复类型选择日程时间书写日程类型选择日程内容书写图3-3 日程界面模块第四章 系统的详细设计4.1 系统主界面的设计和实现4.1.1 系统主界面的头部菜单栏制作这个头部菜单栏是为了提升软件的可操作性,我用的是TabHost+RadioGroup相结合的方法来制作这个部分的。菜单栏的底部位置是通过TabHost这个布局来实现的,然后是LinearLayout的线性布局来布置内容。内部的选项卡是通过TabWiget来实现首先建立好Android工程(我的工程名为:ScheduleManager),在工程下的res/layout下建立一个名为main的空xml文件,然后在这个文件里按照思路来添加布局代码。主界面的菜单选项使用RadioGroup来建立,在这里的布局中RadioGroup里容纳4个RadioButton,而RadioButton是单选按钮。在这种情况下就只有也只能有一个RadioButton能被选择,并且在开始时默认了第一个按钮被选中。其中RadioButton的实现方式是在设置了内部的文字,然后再按钮的顶部上添加上图片,实现的代码如下:从上述代码可以看到,在菜单的每个选项卡样式都是调用了style上的main_tab_bottom来实现样式的,而main_tab_bottom的背景background的值是drawable/btn_bg ,btn_bg不是一个简单的背景图片,而是一个xml文件,通过这个文件可以实现菜单选项卡切换时的背景切换的效果,使得这个菜单栏更加的美观,代码是使用了安卓的selector来实现,在这里是通过不停的条件来判断使用哪一个item的,里面包括了几个属性值,如是否获得焦点、是否响应事件、是否点击三个条件。实施的代码如下: 制定完主页面布局后,在src/com.manage.activity下的MainPage文件中OnCreate(OnCreate方法是用来初始化Activity实例对象的)中调用布局,到现在为止顶部菜单栏的布局已经基本完成,但现在里面所对应的内容还是空的。所以就需要在这里给tabHost中添加tab内容,以第一格的tab为例,先是通过Intent的方式新建个mDate,用来实现页面的跳转的方法,然后动态用tabHost来通过addTab的方法添加对应TabSpec的值和各个属性。最后在添加RadioGroup的选择操作函数,这里是通过switch来完成对应按钮的功能的实现,在每个case项中通过tabHost.setCurrentTabByTag来给与特定的值实现页面上的跳转。最终的效果如图4-1:图4-1 头部菜单栏效果图4.1.2 系统的日历界面系统主界面默认选择日历界面在头部菜单栏下方。(1)首先是建立一个布局文件,上面一部分是显示年月日、生肖和农历的干支纪年。使用的是一个TextView类,对应的在日历的CalendarActivity文件中加入函数来添加头部的年份等信息。首先需要写了一个CalendarView类,这是为日历显示所写的一个类,在其中使用重载的方法定义了几个不同参数的CalendarView,用于不同的情况。在CalendarActivity中实例化CalendarView并且使用CalendarView中的一个方法CalendarView(this, getResources(),jumpMonth,jumpYear,year_c,month_c,day_c);然后书写方法来添加头部的年份 闰哪月等信息。首先是对这个页面的头部进行布局,通过动态化的方法来完成。然后建立一个可以进行改变值的StringBuffer类型的参数textDate。对这个参数进行append操作,添加例如年月日的知道参数里。其中有一个闰年判断的条件函数,是通过calV.getLeapMonth()的值惊醒判断的。完成后对界面使用setText方法来赋值到界面上。最后是对界面的一些美化,同样使用动态布局模式进行。(2)下面是日历界面中主体日期部分显示的完成在CalendarActivity文件初始化实例对象时加入动态添加布局文件的方法。我将此方法命名为addGridView。在这个方法中同样是先进行动态化布局,由于这里用的是GridView,这个GridView应用于将一系列的空间组织成二维网格的形式显示出来,所以适用于我在这里进行的日期界面的建立。同样的首先是动态化布局的建立,这可以实例化GridView为gridView参数进行的。在这里需要添加GridView控件的列为7,列宽为46。并且还加上判断屏幕大小的条件,这需要加入取得屏幕大小的对应函数,这里如果是800*480屏幕的话,就将列宽设置为69。然后进行设置水平和竖直的间距、取值边框、设置居中等操作。在这个方法里面还需加入个OnTouch方法,用来将gridView中的触摸事件回传给gestureDetector,进行下面的触摸操作,即: /将gridview中的触摸事件回传给gestureDetectorOverridepublic boolean onTouch(View v, MotionEvent event) return CalendarActivity.this.gestureDetector.onTouchEvent(event););创建完日历的布局后,是在里面添加上具体的日期。就当前显示的页面来说,是建立几个对应的参数,用来显示或传接数据。例如在函数开始时就String dayNumber = new String49; 这是作为对GridView控件内进行标记序列的,用于下面条件语句的判断等,还有就是界面内的一些控件名的实例化。 然后是动态化的对页面进行属性值的设置。其中在对日期中的第一行,即周一等值的这行,设置字的颜色及背景图。得出这行的位置就需要通过对参数position(对应编号)进行判断是否在7以内。 下一步是当前月信息的显示,这也需要条件函数来判断是否为当前月,也是来判断参数position是否在范围内。在这个月中还需对当天来一个特殊化,即设置当天日期的背景为图片current_day_bgc,字色为白。 在这些操作外,还需要得到一些数值来用于日期数据的插入,在这里建立了个getCalendar方法,如判断是否为闰年的函数返回值isLeapyear,某月的总天数,某月的第一天是星期几,上个月总天数。在这方法中再执行方法getweek,用来得出以后需要标记的日期,这个在后面来介绍。通过上述的步骤基本完成了日历界面中的初步建设。(3)由于日历菜单需要能通过手势触摸来进行翻页,所以要在总体布局下建立一个ViewFlipper类,这个类是用来实现屏幕的切换效果的。先是在布局中建立这个类,然后实例化手势gestureDetector并取得布局中ViewFlipper用于下面的调用。然后是书写书写手势的各个方法,最主要的是onFling的方法,在这里实现了页面的向左及向右滑动的操作,这个操作是由条件语句来实现的,由滑动两点的x坐标的值进行差值计算,如果是起点减去重点大于120时着向左滑动,反之则向右滑动。在滑动操作开始,并且已切换一面后就需要载入新的一张日历页面,这里又会用到参数calV,当向左滑动时则将参数calV所代表的函数CalendarView里的jumpMonth加1,代表下一个月;当向右滑动时则将参数calV所代表的函数CalendarView里的jumpMonth减1,代表上一个月。为了完整性剩余的手势函数只是写了方法未使用。4.1.2 系统的日历特色显示在日历的显示中除了一些基本的日期显示,在日期页面头部有每年相应的生肖和闰年显示,在日期上有每日的阴历以及节假日的显示。这里有两个方法,分别是LunarCalendar 和SpecialCalendar。在LunarCalendar里面包括干支纪年,阴历,生肖,节假日等信息。例如生肖则是建立一个字节数组来记录十二生肖,并且用函数来传回参数对应的生肖。final public String animalsYear(int year) final String Animals = new String 鼠, 牛, 虎, 兔, 龙, 蛇,马, 羊, 猴, 鸡, 狗, 猪 ;return Animals(year - 4) % 12;同样的其他信息,如节假日的名称,也是通过字节数组来储存的。在SpecialCalendar是闰年的判断函数,每月天数,以及对每月的第一天星期的判断。闰年通过传回年值通过函数进行判断,并传回布尔值。每月的天数用switch进行判断赋值给月份天数的参数。 对每月的第一天为星期几的判断并指定。/指定某年中的某月的第一天是星期几public int getWeekdayOfMonth(int year, int month)Calendar cal = Calendar.getInstance();cal.set(year, month-1, 1);dayOfWeek = cal.get(Calendar.DAY_OF_WEEK)-1;return dayOfWeek;最终的效果如图4-2:图4-2 日历界面的最终实现图4.2 系统任务界面的设计任务界面包括任务主界面(所有日程的显示)和对应日期任务的显示,任务的添加等。在任务界面涉及到日程的数据存储,所以先介绍下关于日程的数据存储以及有日程的日期存储(为日历界面的标记服务)。4.2.1 任务界面的数据库准备(1)数据库里表的建立分别建立了schedule表(日程的表)和scheduletagdate(标记日期所需的表)Android 提供了标准的数据库创建方式。建立DBOpenHelper类继承到SQLiteOpenHelper ,实现onCreate 和 onUpgrade 两个方法。OnCreate方法是用于初次使用软件时生成数据库,onUpgrade方法是用于升级软件时更新数据库表结构。首先是schedule表的建立,在这个表中包括日程ID、日程类型的ID、日程重复类型的ID、日程正文内容、日程日程时间这几个参数。建立时对应需要写上参数名、参数类型、主键等。db.execSQL(CREATE TABLE IF NOT EXISTS schedule(scheduleID integer primary key autoincrement,scheduleTypeID integer,remindID integer,scheduleContent text,scheduleDate text); 下面是scheduletagdate表的建立,在这个表中包括标记的ID、年信息、月信息、日信息、日程ID这几个参数。db.execSQL(CREATE TABLE IF NOT EXISTS scheduletagdate(tagID integer primary key autoincrement,year integer,month integer,day integer,scheduleID integer); 建立完表后是继续写入onUpgrade方法,这个方法会在数据库升级时被触发,以便于软件升级时更新表结构。public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) db.execSQL(DROP TABLE IF EXISTS schedule);db.execSQL(DROP TABLE IF EXISTS scheduletagdate);onCreate(db);(2)再分别建立ScheduleVO 和ScheduleDateTag ,里面分别写了表里面各个数据的get(表示获取某个变量值)和set(表示设置某个变量值)方法,以便于调用。(3)建立ScheduleDAO文件,这个文件是用来写数据库的查找、删除等方法。 首先是需要实例化DBOpenHelper用于数据库数据的get与set。private DBOpenHelper dbOpenHelper = null;public ScheduleDAO(Context context)dbOpenHelper = new DBOpenHelper(context, schedules.db);下面就是对表中数据的操作了,包括了保存日程信息、查询某一条日程信息、查询所有的信息、删除日程、将日程标记的日期保存到数据库中。(1)保存日程信息,先是从日程添加页面里获取日程类型的ID、日程重复类型的ID、日程正文内容、日程日程时间这几个参数,然后是使用ContentValues类(这个类是一个键值对,是用来存储名值对,它的名一般是String类型,而值都是基本类型)来new一个参数,用这个参数的put方法将这些个参数放入到数据库中。values.put(scheduleTypeID, scheduleVO.getScheduleTypeID();/放入日程类型IDvalues.put(remindID, scheduleVO.getRemindID(); /放入重复类型ID values.put(scheduleContent, scheduleVO.getScheduleContent();/放入日程正文内容 values.put(scheduleDate, scheduleVO.getScheduleDate();/放入日程日期信息最后调用添加方法insert。 db.insert(schedule, null, values);/插入信息另外需要moveToFirst方法来判断是否为空,进行相关的操作。(2)查询某一条日程信息,由于我这里的设计是通过对日程的点击来查看当前点击日期的详细信息,即是根据日程的ID来查看的。android sqlite的查询方法是query方法,它的查询语句是:db.query(schedule, new StringscheduleID,scheduleTypeID,remindID,scheduleContent,scheduleDate, scheduleID=?, new StringString.valueOf(scheduleID), null, null, null);另外还需要的是判断语句,先用cursor.moveToFirst()判断curor是否为空值,不为空则就给cursor赋值,空着直接cursor.close()来关闭。(3)查询所有的日程信息,由于所有日期可能不止一个,所以返回值设为数组形式。查询依旧是用query方法,这里的的where语句相关的就直接设为null值。其他的依旧与查询一条语句相仿。(4)删除日程,这里的删除日程需要将日程及对应日期上的标记一起删除,这样才可以便于管理,删除使用的语句是delete。db.delete(schedule, scheduleID=?, new StringString.valueOf(scheduleID);/删除日程信息db.delete(scheduletagdate, scheduleID=?, new StringString.valueOf(scheduleID);/删除日程对应的日期标识信息(5)将日程标志日期保存到数据库中,这里是为了将在日期上标识的信息存储到数据库中,方法同第一步的保存相仿,只是数据的不一样,而且使用的是数组形式。for(int i = 0; i dateTagList.size(); i+)/以for循环的方式进行dateTag = dateTagList.get(i);ContentValues values = new ContentValues();values.put(year, dateTag.getYear();/放入年信息values.put(month, dateTag.getMonth();/放入月信息values.put(day, dateTag.getDay();/放入日信息values.put(scheduleID, dateTag.getScheduleID();/翻入日程的I

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论