基于android的日历提醒软件的设计与实现_第1页
基于android的日历提醒软件的设计与实现_第2页
基于android的日历提醒软件的设计与实现_第3页
基于android的日历提醒软件的设计与实现_第4页
基于android的日历提醒软件的设计与实现_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

基于ANDROID的日历提醒软件的设计与实现摘要本软件是一种基于安卓平台开发的一款日历提醒软件。本文主要通过现阶段流行开来的智能手机的软件的设计方法,来设计出一款能够提醒一些事件的应用软件,其真实的目的是通过利用这次的开发过程来学习到安卓开发的一些方法和经验,从而深入地了解安卓开发。本文介绍了移动应用的开发背景,首先需要学习安卓的开发环境的搭建和使用,其次对日历提醒软件做出需求分析,并且通过概要设计来确定其主要功能,然后对其中的功能进行详细设计并书写代码,最后进行功能方面的一些测试来完成设计。通过上面的设计过程,最终实现了软件的两个功能日程管理功能和课程管理功能。日程管理主要是针对某一天的一些事件进行记录和提醒,而课程管理主要针对大学生人群制定,可以记录一些课程的上课时间从而给忙碌的学习生活带来一定的便利。关键词日历提醒;安卓开发;智能手机。DESIGNANDIMPLEMENTATIONOFCALENDARREMINDERSOFTWAREBUILTONANDROIDPLATFORMABSTRACTTHISSOFTWAREAPPLICATIONISACALENDARREMINDERBUILTONANDROIDPLATFORMTHISPAPERISTODESIGNANAPPLICATIONTHATCANREMINDSOMEEVENTSBASEDONDESIGNINGMETHODSOFTHECURRENTPOPULARSMARTPHONESOFTWARETHEREALPURPOSEISTOLEARNSOMEMETHODSANDOBTAINEXPERIENCEOFANDROIDDEVELOPMENTTHROUGHTHEUSEOFTHEDEVELOPMENTPROCESSTHEREFOREWECANGETABETTERUNDERSTANDINGOFANDROIDDEVELOPMENTTHISPAPERINTRODUCESTHEBACKGROUNDOFMOBILEAPPLICATIONDEVELOPMENTFIRSTOFALL,WENEEDTOLEARNHOWTOBUILDANDUSETHEANDROIDDEVELOPMENTENVIRONMENTSECOND,WERESUPPOSEDTOWORKONTHEREQUIREMENTSANALYSISFOROURAPPLICATIONTHENWEREABLETODETERMINETHEMAINFUNCTIONSAFTERTHIS,WECANSTARTDESIGNINGANDCODINGFORTHEDETAILEDFUNCTIONSFINALLY,ITISNECESSARYTOWRITETESTCASESTOVERIFYALLFUNCTIONALITYOFTHISAPPLICATIONTHROUGHTHEABOVEDESIGNPROCESS,THISAPPLICATIONIMPLEMENTSTWOFUNCTIONSTHEYARESCHEDULEMANAGEMENTFUNCTIONANDCOURSEMANAGEMENTFUNCTIONSCHEDULEMANAGEMENTFOCUSESONRECORDINGANDREMINDINGOFSOMEEVENTSONONEDAY,ANDCOURSEMANAGEMENTISDESIGNEDFORUNIVERSITYSTUDENTSTORECORDTHETIMEOFCOURSES,WHICHCANMAKETHEBUSYLEARNINGLIFEMORECONVENIENTKEYWORDSCALENDARREMINDERGOOGLEANDROIDSDKSMARTPHONE目录摘要IABSTRACTII1绪论111课题背景及设计意义112国内外移动应用开发的背景113本论文的主要内容22ANDROID及开发环境介绍321ANDROID系统自身的特点322ANDROID系统自身的功能特征323ANDROID的构成及其工作机制424如何搭建开发环境5241JDK的安装5242ECLIPSE的安装6243ANDROIDSDK的安装6244ADT的安装73日历提醒软件的需求分析831系统的需求分析8311需求分析的过程8312需求分析的方法832日历提醒软件系统的需求分析94日历提醒软件的概要设计1041日历提醒软件的初步需求1042日历提醒软件的概要设计10421日历提醒软件的功能模块说明10422日历提醒软件的功能结构图105日历提醒软件的详细设计1351本软件日历界面的设计和实现1352本软件任务界面的设计15521任务界面的数据库准备15522日程添加界面17523总日程的界面19524对现有日程及日期的标记22525课程管理的界面236日历提醒软件的系统测试2961日程管理方面的测试2962课程管理方面的测试31结论34参考文献35致谢36外文原文及翻译371绪论近年来,除了互联网的迅猛发展,另一个急速发展起来的前沿技术就不得不说智能手机以及其应用软件的高速发展。智能手机以个人计算机以及运营商的服务器为处理终端,并利用一些前沿技术如人工智能、人机接口技术、传感技术、多媒体技术、计算机图形学等高度并行的实时计算技术来实现人机的交互。其中以个人版的智能手机的应用软件等一系列的手机应用软件发展尤为迅速。当今无论是工作人群还是在校学生,所面临的压力都是十分巨大的,而一些繁杂的事务记忆也使我们身心疲劳,日历提醒软件可以让我们在百忙的生活学习中从一些繁杂的事务记忆中解脱出来,它可以准确地提醒我们一些关键事务的处理时间段,而这样一款可以随时随地在手机上应用的提醒软件,其魅力是不可估量的。11课题背景及设计意义智能手机应用软件是近年来十分活跃的技术领域,目前市场上安卓智能手机的实用人群还是十分多的,手机几乎成为了我们日常工作以及其他生活娱乐的必需品,所以在安卓平台上开发的手机应用软件有着十分广阔的市场,既然安卓的应用软件面向的是广大的普通用户,而不是对软件开发以及计算机的一系列了解十分透彻的专家,所以设计出来的软件一定要简单而且易使用,所以在手机软件设计时,一定要注意软件使用的简单性以及通俗性。手机的多任务处理是一个十分重要的环节,在一些日常的短信以及通话等行为中,手机的一些软件应该支持后台的运行以及一些优先级的处理,这就需要日历提醒软件能够在工作时考虑到手机当前程序的一个运行状况,这样才能更好地处理一些应用软件在使用时的一些优先级问题,保证其进程能够在后台完美地运行,从而达到应用程序之间的良好切换。最后就是十分简洁的操作界面以及简单的操作方式,还有十分美观的界面背景,以及一些人性化的提示和个性设计也是十分重要的,所以在设计的过程中一定要注意一些细节方面的东西,这样日历提醒软件的设计才能更加完美和实用。12国内外移动应用开发的背景目前智能手机的迅速发展以ANDROID以及苹果的IOS为主要领头,谷歌在2012年的开发者大会上发布了ANDROID41操作系统,到目前为止已经更新到了442版本,谷歌的ANDROID自2010年来呈现了突飞猛进的发展势头,其用户数量也是呈现高速地增长。对于ANDROID本身来言,其开放式的开源性是其最主要的特点,这个特点使得以前由少数软件商垄断系统软件平台的状况得到了极大地改善,让更多的民间开发商加入进来,增加了客户使用的体验,因此也具有十分广阔的发展空间。13本论文的主要内容本论文主要通过对日历提醒软件做一个详细系统的设计,从开发环境的搭建到最后的系统测试,每个步骤都写出了基本的方法和一些代码,最终实现了哪些功能等都做了详细的介绍,例如开发环境的搭建以及系统概要设计时的一些思想,还有在详细设计时实现的功能,通过上述内容,最终软件实现了两个主要功能,即日程管理功能和课程管理功能。这两个功能的实现,基本上解决了软件设计时提出的问题,而通过对软件的设计,我们从中也学习到了很多的知识和技能。2ANDROID及开发环境介绍21ANDROID系统自身的特点ANDROID是基于LINUX操作内核的系统,ANDROID的语言是基于JAVA语言的,其中还涉及一些C以及C语言。如果使用者本身对JAVA语言十分地熟悉,那使用起来会比较得心应手。ANDROID是基于ECLIPSE平台做开发,并且使用ANDROIDSDK插件来辅助开发,而且具有丰富的源代码模型,在源码上的处理上也比较良好,这样就使得开发者在开发软件时的难度降低。22ANDROID系统自身的功能特征L应用程序架构ANDROID在应用程序架构中拥有多种不同的基础组件,在使用起来可以通过调用这些组件,来减少开发所需要的时间和精力。2DALVIK虚拟机器GOOGLE使用自主开发的代号为DALVIK的虚拟机,它既保证了在API方面的兼容性,而且使手机运行效率更高,占用的资源更少。3集成的浏览器ANDROID具有内建的集成浏览器,它是以WEBKIT这个开源浏览引擎为基础开发的浏览器,还有SAFARI,MIDORI,EPIPHANY等目前都在使用。集成浏览器在浏览网页时,可以达到比较出色的效果,提高用户体验。4绘图能力得到优化一般程序用到的绘图分为2D和3D方面,OPENGLES10规范的类库在3D方面被采用,而在2D方面,SGL则被广泛采用。这两种引擎十分地快捷,并且支持硬件加速。5数据库SQLITE这是一种轻型的数据库,它能够提供结构化的数据存储,它支持多种的操作系统,例如WINDOWS、LINUX、UNIX等,同时也兼容PHP,JAVA等语言,它本身还是开放式的关联式资料库,虽然它本身并不是很大,但是他支持的SQL语句却不逊色于其他的开源数据库,它小巧轻量的设计,使它更适用于手机。6支持多种多媒体主要支持多种用于播放的媒体文件,例如MP3等多种音频音乐文件,还支持统一资源识别地址URIWEB上可用的每种资源HTML文档、图像、视频片段、程序等。另外还支持JPG、PNG、GIF等多种图像格式。7GSM技术GSM是GLOBALSYSTEMFORMOBILECOMMUNICATIONS的缩写,就是全球移动通信系统,它是由欧洲电信标准组织ETSI制订的一个数字移动通信标准,也是第二代移动通信技术,他提供了一个在全球各地都可以使用的移动电话网络标准,让用户一部手机可以畅通全球。GSM技术是在手机硬件方面的展现,也是开发ANDROID程序时的主要特点之一。8蓝牙、EDGE、3G、WIFI、GPS以及4G网络这些高端前沿的技术以及科技都是手机硬件方面的体现,也是未来在开发ANDROID应用程序时所应该突出的特点之一。23ANDROID的构成及其工作机制ANDROID在开发时都是通过框架与底层进行交互,对于一个ANDROID应用程序来说,主要是由ACTIVITY、INTENTRECEIVER、SERVICE、CONTENTPROVIDER四部分组成,但也不是每个应用程序都有这四个部分,当使用程序时,需要在ANDROIDMANIFESTXML这个文件中进行一些配置,而这个配置文件则是每个ANDROID应用程序所必须的,它可以对程序的组件进行定义。ANDROID应用的构成和工作流程如图21所示图21ANDROID应用的构成和工作流程在ANDROID中还包含着一些C和C的类库,ANDROID中的不同组件可以来使用这些类库,开发时也可以通过应用程序框架来使用这些功能。一些核心类库列表1SURFACEMANAGER它的主要功能是存取、显示系统及管理。它可以通过在显示与存取操作间的互动等一系列的动作来实现2D与3D多应用程序之间的无接缝整合。23DLIBRARIES它主要是按照OPENGLES10的规范定义的3D绘图引擎,它可以将3D功能的处理显示做到最佳化。3SGL主要是处理有关显示2D方面的绘图引擎。4MEDIAFRAMEWORK以PACKETVIDEO公司的OPENCORE为基础所拓展的支持大量当下流行的音频格式(MPEG4、MP3等)和静态图片(JPG、PNG、GIF等)的多媒体类库。5FREETYPE主要是用来显示点阵图和处理向量字形的。6SSLSECURESOCKETSUYER,就是“安全套接层”,是为网络通信提供安全及数据完整性的一种安全协议。SSL协议是位于TCP/IP协议与各种应用层的协议之间的,被广泛地用于WEB浏览器与服务器之间的身份认证和加密数据的传输。7SQLITE这是一种轻型的数据库,它能够提供结构化的数据存储,能够做为所有应用程序使用的轻量级关系数据库的引擎。8WEBKIT它是一个开源的浏览器引擎,可以构建ANDROID浏览器和内嵌的WEB视图,同时具有高效稳定,兼容性好,且源码结构清晰,易于维护等特点。9LIBC它是针对LINUX嵌入式装置进行最佳化调整的一个BSD标准C类库。ANDROID本身虽然是用JAVA语言来进行开发的,但它并不是使用JAVA的组件来运行的,它是由谷歌自行研发的核心类库以及DALVIK虚拟机等组件来运行程序。24如何搭建开发环境241JDK的安装开发ANDROID应用程序的时候,仅有JAVA运行环境是不足以开发ANDROID应用程序的,需要完整的JDK,且需要15或者16以上的版本。首先我们需要安装JDK,可以从HTTP/WWWORACLECOM/TECHNETWORK/JAVA/JACASE/DOWNLOADS/INDEXHTML来下载JDK6并且安装。(ANDROID移动应用设计与开发中开发环境的配置非常详细)。下一步,我们要设置JAVA_HOME环境变量来指向JDK的安装目录。右击“计算机”“属性”“高级系统设置”“环境变量”。然后点击“新建”添加JAVA_HOME变量。如图22所示图22JAVA_HOME环境变量的配置接下来配置环境变量CLASSPATH,步骤和上一步类似,变量名为CLASSPATH,变量值指向JDK目录下的LIB文件夹,同样,最后还需要编辑环境变量PATH,变量值指向JDK安装目录下的BIN文件夹。这样环境变量基本上配置完成。242ECLIPSE的安装在ANDROID移动应用设计与开发中提到ECLIPSE是一个开放源代码的、基于JAVA的可扩展开发平台。就其本身而言,他只是一个框架和一组服务,用于通过插件组件构建开发环境。从这段话中可以了解到,仅仅只有ECLIPSE平台是不够的,我们还需要多种的插件来配合开发。ECLIPSE有多种版本,可以从网上下载到,一般电脑是WIN7的32位系统,安装完成后,我们首次启动ECLIPSE时,我们需要给他定一个工作区间,例如F/ECLIPSE。接下来就是其他组件的安装了。243ANDROIDSDK的安装ANDROIDSDK是开发安卓应用程序时的一个必须安装的组件。ANDROIDSDK可以从HTTP/DEVELOPERANDROIDCOM/SDK下载。下载上SDK后,接下来需要将它解压,其中的一个TOOLS目录,最后需要将它添加到PATH中。安装界面如图23图23ANDROIDSDK的安装界面244ADT的安装ECLIPSE中ADT这个插件对于开发ANDROID应用程序来说具有巨大的帮助,它本身带有一些工具可以对ANDROID应用程序进行创建、测试及调试。它需要ECLIPSE中的INSTALLNEWSOFTWARE工具来执行安装。在安装ADT的最后一步是将它指向ANDROIDSDK。点击菜单选择PREFERENCES,然后选择ANDROID节点将SDKLOCATION字段替换为ANDROIDSDK的路径,最后点击下APPLY按钮即可完成操作。最终运行效果如图24图24开发环境配置完成效果图3日历提醒软件的需求分析31系统的需求分析311需求分析的过程需求分析的任务不是确定软件本身要怎么样完成它的工作,而是确定软件本身需要完成哪些工作,一般可以总结为四个步骤(1)需求获取调查研究。对于不同软件的开发方法,在进行需求时会有所不同,但是一般都必须做到充分的调查研究,对目标系统的运行环境、功能等要与用户取得一致的意见。(2)需求提炼分析建模。这个阶段的主要任务是建立分析模型,把来自用户的问题加以分析,并抽象建立起目标的分析模型。例如数据流图、实体联系图、控制流图、状态转换图、用例图等。(3)需求描述编写SRS。为了使需求描述具有统一的风格,可以采用已有的模板,例如国际标准IEEE标准8301998或者中国国家推荐标准GB9385中描述的模板,也可以根据自己项目软件的特点形成自己的SRS模板。(4)需求验证。由分析员和用户一起对需求分析的结果进行严格的审查和验证,确保需求说明可作为软件设计和最终系统验收的依据。312需求分析的方法需求分析的方法具有许多种,简单地介绍几种方法(1)功能分解方法功能分解方法可以说是最早的分析方法,这个方法是将一个系统看成是由若干功能组成的一个整体,每个功能又可以分成若干个子功能,这个方法体现了“自顶向下,逐步求精”的思想,最后分析的结果一般已经是系统程序结构的一个雏形,实际上它已经很难与软件设计明确分离,难以适应用户的需求变化。(2)结构化分析方法结构化分析方法是一种从问题空间到某种表示的映射方法,由数据流图来表现软件的功能,这种方法比较简单、实用,适用于处理数据领域的问题,也符合传统软件工程思想。(3)信息建模方法信息建模方法局势从数据的角度来对现实世界建立模型,也就是现实系统的一个抽象,所以他必须能够反映实际,而且还必须高于实际。它主要依赖的工具就是实体联系图,即ER图。ER图是面向对象分析的基础,但它本身对数据不是封闭的,不支持继承性和消息传递机制。(4)面向对象的分析面向对象的分析就是把ER图中的概念与面向对象程序设计语言中的概念结合在一起的分析方法。在该方法中采用了实体、关系和属性等信息模型分析中的概念,同时采用了封闭、类结构和继承性等面向对象程序设计语言中的概念。32日历提醒软件系统的需求分析(1)功能需求系统需要具有日历的模块,然后是具有记事本的功能,能够在对应的日期上做一些记录,还有需要具备一个闹钟的功能,能够在合适的时间进行提醒;课程管理方面需要有一个记录每节课程时间的模块其他的功能和日程管理功能类似。(2)性能需求软件需要能够识别手机的系统时间,在适当的时间做到提醒,反应的误差最好不超过1分钟,占用手机的内存应当在2左右。(3)环境需求软件需要在安卓手机上能够运行流畅,支持40以上的安卓系统,对于现阶段流行的智能手机要做到能在其上运行稳定。(4)用户界面需求具有简洁易懂的操作界面,并且具有比较美观的可视界面,还需要具有一定的快捷操作功能,例如长时间点击或者双击直接对事件进行添加、删除等操作。(5)其他功能需求在提示功能方面可以做一些多方面的选择,根据用户的需要选择铃声或者是震动提示。4日历提醒软件的概要设计41日历提醒软件的初步需求本软件是基于ANDROID语言设计的一款手机上的日历提醒软件,它为本软件的使用者提供一些日常事务管理方面的服务,例如重要事件的提醒或者课程的提醒,它包括日历的查看,日历上重要事件的查看等以及一些操作,如事件的增加与删除、日程的修改与删除、以及软件的一些设置还有相关信息的查看等功能。本软件可以帮助人们对自己生活中的一些事务起到提醒的作用,释放忙碌人群对琐碎事务的记忆,方便工作人群或者学生们的生活。42日历提醒软件的概要设计421日历提醒软件的功能模块说明(1)日历查看模块需要拥有一套完整的日历界面,包括年、月、日以及星期几,而且在点击某个确切的日期时,要能够显示出当前是否添加了一些事件的提醒,对已经拥有事件记录的日期要有特殊的标记。(2)日程管理模块在日程管理模块中要包含总的日程显示以及单击对应日期时可以查看当前记录的一些活动或者事件,可以添加新的事件,也可以对当前已经具有的事件做到修改或者删除,在记录拥有一些事件的日期后,需要在日历上面加以一定的标识,用来提醒用户事件的日期,或者方便用户对现有事件作出一定的修改或者删除。(3)课程管理模块在课程管理模块中需要有星期的标识,在某一天记录课程时,需要对这门课程的时间有一定的显示,还有作业的情况方面的提醒,其他的增添删除操作基本同日程管理模块类似。(4)设置界面模块其中包含了一些对界面的设置以及对日程的设置选项。(5)关于信息模块其中包含了一些本软件的设计信息及使用的一些基本信息。422日历提醒软件的功能结构图首先在设计时可以根据日历提醒软件中的几个大模块日历查看模块、日程管理模块、课程管理模块、设置界面模块、关于信息模块来绘制出本软件总体的一个功能模块图,如图41所示,总体的结构图反映了本系统各个模块之间的联系和总体情况。图41系统总体功能模块图然后在总体的功能模块图完成后,就是各个模块的详细功能结构图,在日历模块的界面显示上,可以分为如下几个部分,见图42图42日历显示模块图接下来就是日程模块的结构图,里面应该包含有重要日程的显示,日程的添加和删除等,以及事件的记录,见图43图43日程界面模块日历系统主界面日历模块任务模块设置模块关于模块日历显示总日程显示单一日程显示类型设置关于信息日历显示日期显示阴历日期显示节假日显示日程显示选择日程类型选择书写日程时间书写日程内容删除日程对于一些在校的学生,我们还设置了一个课程管理的模块,方便学生们对自己课程的一些时间、地点等做一些提醒安排,详细见图44图44课程界面功能模块图以上就是本系统的一个初步的设计,其中它可以方便的显示出当前日期以及当前日期内的一些日程安排,或者显示出当前日期内有什么样的课程安排,同时,也可以让用户能够随时对自己的日程进行查看、修改、添加或者删除,而这些人性化的设置,为本系统增色不少。接下来就是整个软件最重要的部分了,也就是详细设计阶段。课程界面课程设置课程增加课程删除课程查看5日历提醒软件的详细设计详细设计最主要的目的就是确定如何实现在概要设计中具体的功能和要求,也就是经过这一阶段,需要得出对目标功能的精确描述,详细一点就是为软件结构图中的每一个模块编写相应的代码和算法。详细设计的目的不仅仅是要在逻辑上正确地实现每个模块的功能,最重要的就是在设计处理的过程中应该尽可能的简洁易懂。51本软件日历界面的设计和实现(1)第一步系统需要建立一个布局文件来显示年月日,采用TEXTVIEW类,对应在日历的CALENDARACTIVITY文件中加入函数来添加年月日等信息。接下来需要编写一个作为日历显示的CALENDARVIEW类,其中使用重载的方法来定义几个具有不同参数的CALENDARVIEW用于不同的情况。接下来在的工作就是在CALENDARACTIVITY这个类中实例化CALENDARVIEW并且使用CALENDARVIEW其中的一个方法CALENDARVIEWTHIS,GETRESOURCES,JUMPMONTH,JUMPYEAR,YEAR_C,MONTH_C,DAY_C然后书写方法来添加头部的年份等信息。接下来通过动态化的方法来实现对页面的头部进行布局,接着建立一个可以对值进行改变的STRINGBUFFER类型的参数TEXTDATE,并对其进行APPEND操作,添加到年月日的参数里,对月闰年的判断,是通过一个条件函数CALVGETLEAPMONTH的值来进行判断的,最后对界面使用SETTEXT方法来赋值到界面上,最后一步就是使用动态布局模式对界面进行一些美化操作。(2)第二步需要对日历界面中的主体,也就是日期部分的显示要完成。首先在CALENDARACTIVITY文件初始化实例对象时加入动态添加布局文件,并将此方法命名为ADDGRIDVIEW,然后在这个方法中进行动态化布局,GRIDVIEW可以将一系列的空间组织成二维网格的形式显示出来,所以这里比较适合对日期的界面进行布局。首先还是动态化布局的建立,这里可以实例化GRIDVIEW为GRIDVIEW参数进行,在这里还需要添加GRIDVIEW控件的列为7,列宽为46,然后加上判断屏幕大小的条件,这就需要加入取得屏幕大小的对应函数,如果是800480屏幕的话,需要将列宽设置为69,接下来对水平和竖直的间距、取值边框、设置居中等进行一系列的操作。在这个方法里面还需加入个ONTOUCH方法,用来将GRIDVIEW中的触摸事件回传给GESTUREDETECTOR,进行下面的触摸操作,即OVERRIDEPUBLICBOOLEANONTOUCHVIEWV,MOTIONEVENTEVENTRETURNCALENDARACTIVITYTHISGESTUREDETECTORONTOUCHEVENTEVENT日历的布局创建完成后,需要在里面填上具体的日期。就对当前显示的界面来说,需要建立几个对应的参数来显示和传接数据。比如在函数开始时就STRINGDAYNUMBERNEWSTRING49这是作为对GRIDVIEW控件内进行标记序列的,可以对接下来的条件语句进行判断,还有就是对界面内的一些控件名进行实例化,然后是对页面属性值进行动态化设置。接着在对日期中的第一行就是周一、周二等的这行,设置出字的颜色以及背景图案,而这行的位置需要通过对参数POSITION(对应编号)进行判断是否在7以内。接下来就是当前月份的信息显示,这也需要用条件函数来判断是否是当前月(也就是判断参数POSITION是否在范围内),然后对当天的日期进行一个标记,可以设置当天的日期背景为图片CURRENT_DAY_BGC,字体的颜色为白色。通过上面的这些步骤,我们就基本完成了日历界面中的一些初步设置。(3)最后,由于市场上现在用的手机大都是触摸屏幕,也就是说日历菜单需要通过我们的触摸来进行翻页,所以需要在总体布局下建立一个VIEWFLIPPER类(这个类可以实现屏幕的切换),然后然后实例化手势GESTUREDETECTOR并取得布局中VIEWFLIPPER用于下面的调用。接下来书写手势的方法主要是ONFLING的方法,这个方法可以实现页面的向左或者向右滑动的操作,而这个操作可以用条件语句来实现由滑动两点的X坐标的值进行差值计算,如果是起点减去终点大于120时着向左滑动,反之则向右滑动。在滑动操作开始,并且已切换一面后就需要载入新的一张日历页面,这里又会用到参数CALV,当向右滑动时则将参数CALV所代表的函数CALENDARVIEW里的JUMPMONTH加1,代表下一个月;当向左滑动时则将参数CALV所代表的函数CALENDARVIEW里的JUMPMONTH减1,代表上一个月。这样,我们的软件的界面可以说是大体上完成。在日历界面的显示中,我们除了一些基本的日期显示外,还应该在日期的头部页面上有每年每月的显示,而在LUNARCALENDAR方法里面就包括干支纪年等信息。同样的其他信息,也是通过字节数组来储存的。在闰年判断函数SPECIALCALENDAR中可以对每月天数,或者每月的第一天是星期几进行判断。闰年是通过传回年值并通过函数进行判断,最后传回布尔值;而每月的天数是用SWITCH进行判断并赋值给月份天数的参数;对每月的第一天为星期几则是使用如下代码PUBLICINTGETWEEKDAYOFMONTHINTYEAR,INTMONTHCALENDARCALCALENDARGETINSTANCECALSETYEAR,MONTH1,1DAYOFWEEKCALGETCALENDARDAY_OF_WEEK1RETURNDAYOFWEEK日历的界面完成如图51所示图51日历提醒软件的界面52本软件任务界面的设计521任务界面的数据库准备本软件的任务界面主要包含主界面的日程显示以及对应日期内的任务显示,还有任务的添加与删除等。首先任务界面所涉及到的就是日程数据的存储,以下先做介绍。(1)数据库表的建立主要建立了两个表SCHEDULE表(日程的表)和SCHEDULETAGDATE(标记日期所需的表)。ANDROID提供了标准的数据库创建方式。建立DBOPENHELPER类继承到SQLITEOPENHELPER,实现ONCREATE和ONUPGRADE两个方法。首先对SCHEDULE表进行建立,在其中包括日程及日程类型的ID,日程重复类型的ID,日程的正文内容和日程时间这几个参数,在创建时需要填写上参数名、参数类型及主键等。DBEXECSQL“CREATETABLEIFNOTEXISTSSCHEDULESCHEDULEIDINTEGERPRIMARYKEYAUTOINCREMENT,SCHEDULETYPEIDINTEGER,REMINDIDINTEGER,SCHEDULECONTENTTEXT,SCHEDULEDATETEXT“接下来是对SCHEDULETAGDATE表的建立,在这个表中包括了标记的ID、年信息、月信息、日信息、日程ID这几个参数。DBEXECSQL“CREATETABLEIFNOTEXISTSSCHEDULETAGDATETAGIDINTEGERPRIMARYKEYAUTOINCREMENT,YEARINTEGER,MONTHINTEGER,DAYINTEGER,SCHEDULEIDINTEGER“建立完表后是继续写入ONUPGRADE方法,这个方法在数据库升级时会被触发,以便于软件升级时更新表结构。PUBLICVOIDONUPGRADESQLITEDATABASEDB,INTOLDVERSION,INTNEWVERSIONDBEXECSQL“DROPTABLEIFEXISTSSCHEDULE“DBEXECSQL“DROPTABLEIFEXISTSSCHEDULETAGDATE“ONCREATEDB(2)再分别建立SCHEDULEVO和SCHEDULEDATETAG,里面分别写了表里面各个数据的GET(表示获取某个变量值)和SET(表示设置某个变量值)方法,以便于调用。(3)建立SCHEDULEDAO文件,这个文件是用来写数据库的查找、删除等方法。首先是需要实例化DBOPENHELPER用于数据库数据的GET与SET。PRIVATEDBOPENHELPERDBOPENHELPERNULLPUBLICSCHEDULEDAOCONTEXTCONTEXTDBOPENHELPERNEWDBOPENHELPERCONTEXT,“SCHEDULESDB“下面就是对表中数据的操作了,包括了保存日程信息、查询某一条日程信息、查询所有的信息、删除日程、将日程标记的日期保存到数据库中。(1)保存日程信息首先需要从日程添加页面里获取日程类型的ID、日程重复类型的ID、日程的正文内容、日程时间这几个参数,接下来使用CONTENTVALUES类(这个类是一个键值对,是用来存储名值对,它的名一般是STRING类型,而值都是基本类型)来NEW一个参数,然后用这个参数的PUT方法将这些参数放入到数据库中。VALUESPUT“SCHEDULETYPEID“,SCHEDULEVOGETSCHEDULETYPEIDVALUESPUT“REMINDID“,SCHEDULEVOGETREMINDIDVALUESPUT“SCHEDULECONTENT“,SCHEDULEVOGETSCHEDULECONTENTVALUESPUT“SCHEDULEDATE“,SCHEDULEVOGETSCHEDULEDATE最后调用添加方法INSERT。DBINSERT“SCHEDULE“,NULL,VALUES然后需要用到MOVETOFIRST方法来判断是否为空,从而进行一系列相关操作。(2)查询某一条日程信息本系统的设计是通过对日程的点击来查看当前日期内的详细信息,也就是根据日程的ID来查看。ANDROIDSQLITE的查询方法是QUERY方法,查询语句是DBQUERY“SCHEDULE“,NEWSTRING“SCHEDULEID“,“SCHEDULETYPEID“,“REMINDID“,“SCHEDULECONTENT“,“SCHEDULEDATE“,“SCHEDULEID“,NEWSTRINGSTRINGVALUEOFSCHEDULEID,NULL,NULL,NULL然后还需要加上判断语句,用CURSORMOVETOFIRST判断CUROR是否为空值,不为空则就给CURSOR赋值,为空则直接CURSORCLOSE来关闭。(3)查询所有的日程信息由于日程信息可能不止一个,所以返回的值设为数组形式,查询依旧是采用QUERY方法,这里的WHERE的相关语句设为NULL值,其他的与查询一条日程信息的语句基本相同。(4)删除日程删除日程需要将日程及对应日期上的标记一起删除,这样管理起来比较容易,使用的语句是DELETE。DBDELETE“SCHEDULE“,“SCHEDULEID“,NEWSTRINGSTRINGVALUEOFSCHEDULEIDDBDELETE“SCHEDULETAGDATE“,“SCHEDULEID“,NEWSTRINGSTRINGVALUEOFSCHEDULEID(5)将日程标志日期保存到数据库中这是为了将日期上标识的信息存储到数据库中,基本方法与第一步保存相仿,就是数据使用的是数组形式。FORINTI0I下面就是日程类型以及重复类型这两个类型的选择的点击框,在相对布局中需要自己设置这两个点击框的位置,先建立日程类型的文本框,以LAYOUT_BELOW来将这个文本框放在标题框(用ID来定位标题框)下面,同时则需要特殊设定的参数ANDROIDLAYOUT_BELOW“ID/SCHEDULETOP“ANDROIDLAYOUT_WIDTH“160DP“ANDROIDLAYOUT_HEIGHT“40DP“ANDROIDDRAWABLERIGHT“DRAWABLE/SCHEDULE_TYPE“然后是添加日程重复方式的文本框,利用LAYOUT_TORIGHTOF来实现,然后放在日程类型文本框的右边,相应的也要将位置设于标题框下方,其他与上面的基本相似ANDROIDLAYOUT_TORIGHTOF“ID/SCHEDULETYPE“ANDROIDDRAWABLERIGHT“DRAWABLE/SCHEDULE_TYPE“接下来还有时间的点击修改框、日程文本框及最后的保存及取消的按钮,实现的效果图如图52图52日程添加界面的效果523总日程的界面(1)任务界面的布局在任务界面的布局中采用的是动态布局的方法PROTECTEDVOIDONCREATEBUNDLESAVEDINSTANCESTATE/TODOAUTOGENERATEDMETHODSTUBSUPERONCREATESAVEDINSTANCESTATEDAONEWSCHEDULEDAOTHISSVNEWSCROLLVIEWTHISPARAMSSETMARGINS0,5,0,0LAYOUTNEWLINEARLAYOUTTHISLAYOUTSETORIENTATIONLINEARLAYOUTVERTICALLAYOUTSETBACKGROUNDRESOURCERDRAWABLESCHEDULE_BKLAYOUTSETLAYOUTPARAMSPARAMSSVADDVIEWLAYOUTSETCONTENTVIEWSV接下来创建放日程信息的TEXTVIEW,这个文本框用于存放日程的所有信息,包括时间、日程类型、日程重复类型、日程内容等信息。PUBLICVOIDCREATEINFOTEXTSTRINGSCHEDULEINFO,INTSCHEDULEIDFINALBORDERTEXTVIEWINFONEWBORDERTEXTVIEWTHIS,NULLINFOSETTEXTSCHEDULEINFOINFOSETTEXTCOLORCOLORBLACKINFOSETBACKGROUNDCOLORCOLORWHITEINFOSETLAYOUTPARAMSPARAMSINFOSETGRAVITYGRAVITYCENTER_VERTICALINFOSETPADDING10,5,10,5INFOSETTAGSCHEDULEIDLAYOUTADDVIEWINFO(2)调用数据库查找方法并取得所有日程信息,并且判断是否为空,如不为空则显示所有日程PUBLICVOIDGETSCHEDULEALLSCHLISTDAOGETALLSCHEDULEIFSCHLISTNULLFORSCHEDULEVOVOSCHLISTSTRINGCONTENTVOGETSCHEDULECONTENTINTSTARTLINECONTENTINDEXOF“N“IFSTARTLINE0CONTENTCONTENTSUBSTRING0,STARTLINE“ELSEIFCONTENTLENGTH30CONTENTCONTENTSUBSTRING0,30“SCHEDULEINFOCALENDARCONSTANTSCH_TYPEVOGETSCHEDULETYPEID“N“VOGETSCHEDULEDATE“N“CONTENTSCHEDULEIDVOGETSCHEDULEIDCREATEINFOTEXTSCHEDULEINFO,SCHEDULEIDELSESCHEDULEINFO“没有日程“CREATEINFOTEXTSCHEDULEINFO,1(3)设置监听的方法来跳转到SCHEDULEINFOVIEW并显示单条任务信息当选择这些日程中的一个时,则会跳转到这个日程所对应的单一日程的显示界面,也就是在日程显示的每一个框中添加一些日程或者事件,点击后则会跳转到相应的界面,并且显示信息。INFOSETONCLICKLISTENERNEWONCLICKLISTENEROVERRIDEPUBLICVOIDONCLICKVIEWVSTRINGSCHIDSTRINGVALUEOFVGETTAGSTRINGSCHEDULEIDSNEWSTRINGSCHIDINTENTINTENTNEWINTENTINTENTSETCLASSSCHEDULEACTIVITYTHIS,SCHEDULEINFOVIEWCLASSINTENTPUTEXTRA“SCHEDULEID“,SCHEDULEIDSSTARTACTIVITYINTENT最后的显示效果如图53图53总日程效果图524对现有日程及日期的标记这个设计主要是为了方便用户,让用户可以非常直观地看到在哪天会有一些保存的日程,可以更加方便地查看已经记录的事件。(1)日期标记的实现使用数据库中SCHEDULETAGDATE表里的数据来判断是否需要标记IFSCHDATETAGFLAGNULLI从上面的代码中可以看出,菜单栏上的每个选项卡实现样式的方式都是调用了STYLE上的MAIN_TAB_BOTTOM,然而其背景BACKGROUND的值是DRAWABLE/BTN_BG,而BTN_BG也不是一个普通的背景图片,而是一个XML文件,这个文件可以实现菜单选项卡切换时的,背景也随之切换,从而更加地美观,代码是通过ANDROID的SELECTOR来实现,这里是通过不同的条件来判断哪一个ITEM被使用,其中包含了一些属性值,比如焦点是否获得、事件是否响应、点击是否实现。其代码如下在主页面的布局制作完成后,需要在SRC/COMMANAGEACTIVITY下的MAINPAGE文件中ONCREATE(这个方法是对ACTIVITY实例对象进行初始化的)中调用该布局,这样,顶部菜单栏的布局已经算是基本完成了,但是其中还没有内容,接下来需要在TABHOST中添加TAB内容。可以通过INTENT的方式新建个MDATE,这样可以实现页的面跳转,然后用TABHOST通过ADDTAB的方法添加对应TABSPEC的值和各个属性,最后使用RADIOGROUP的选择操作函数,通过SWITCH方法来对按钮的功能进行实现,每个CASE项中通过TABHOSTSETCURRENTTABBYTAG特定的值来实现页面上的跳转。效果如图55图55课程管理的头部菜单栏(2)课程的日程界面SCHEDULEINFOVIEW的设计这里的设计与总日程基本相似,不再累述,完成效果如图56图56课程管理界面(3)课程时间设置界面的布局首先写一个SCHEDULEADDACTIVITY类来调用布局和书写方法新增界面的上方有两个TEXTVIEW是用来选择类型的,另一个时间的显示框可以用来显示时间或者修改时间。实现选择类型的方法以其中一个为例首先取得TEXTVIEW的位置并进行实例化,便于后面的使用。SCHEDULETYPEBORDERTEXTVIEWFINDVIEWBYIDRIDSCHEDULETYPE点击时跳到选择界面并传值,跳转的时候需要获得原来界面上的日程类型,这里需要在点击触发效果的方法上将数据传到类型选择页面上去,用于显示它的默认值。SCHEDULETYPESETONCLICKLISTENERNEWONCLICKLISTENEROVERRIDEPUBLICVOIDONCLICKVIEWVSCHTEXTSCHEDULETEXTGETTEXTTOSTRINGINTENTINTENTNEWINTENTINTENTSETCLASSSCHEDULEADDACTIVITYTHIS,SCHEDULETYPEVIEWCLASSINTENTPUTEXTRA“SCH_REMIND“,NEWINTSCH_TYPEID,REMINDIDSTARTACTIVITYINTENT然后需要一个新建SCHEDULETYPEVIEW文件来实现跳转后的界面。这里是存储SCHEDULETYPEVIEW和SCHEDULEREMINDVIEW里面选项的VALUE值。这个页面是通过实例化来实现布局的LINEARLAYOUTLAYOUTPARAMSPARAMSNEWLINEARLAYOUTLAYOUTPARAMSLAYOUTPARAMSFILL_PARENT,LAYOUTPARAMSWRAP_CONTENTCCNEWCALENDARCONSTANTLAYOUTNEWLINEARLAYOUTTHISLAYOUTSETORIENTATIONLINEARLAYOUTVERTICALLAYOUTSETBACKGROUNDRESOURCERDRAWABLESCHEDULE_BKLAYOUTSETLAYOUTPARAMSPARAMS实例化布局里的组件为后面使用时做准备,用于给这些组件添加各项参数。GROUPNEWRADIOGROUPTHISBTSAVENEWBORDERTEXTVIEWTHIS,NULLBTCANCELNEWBORDERTEXTVIEWTHIS,NULLTEXTTOPNEWBORDERTEXTVIEWTHIS,NULL接下来有个从SCHEDULEADDACTIVITY传来的值,是日程新增界面里的日程类型的已选择的ID值,用来选择RADIOGROUP的默认选项INTENTINTENTGETINTENTINTSCH_REMINDINTENTGETINTARRAYEXTRA“SCH_REMIND“IFSCH_REMINDNULLSCH_TYPEIDSCH_REMIND0REMINDIDSCH_REMIND1FORINTI0IINTHEELEMENT,THEANDROIDICONATTRIBUTEPOINTSTORESOURCESFORANICONTHATIDENTIFIESTHEAPPLICATIONINTHEELEMENT,THEANDROIDNAMEATTRIBUTESPECIFIESTHE

温馨提示

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

评论

0/150

提交评论