android日历日程设计文档_第1页
android日历日程设计文档_第2页
android日历日程设计文档_第3页
android日历日程设计文档_第4页
android日历日程设计文档_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

1、校内生产实习报告校内生产实习报告 androidandroid 日历日程管理日历日程管理 指导老师:指导老师: xxx 姓姓 名:名: xxx 专业班级:专业班级: xxxxxxxxxxxxx 学学 号:号: xxxxxxxx 电电 话:话: xxxxxxxxx 系系 (院):院): 计算机与信息工程学院 2014 年 7 月 14 日 目录目录 一.项目概述.4 1.1 编写目的.4 1.2 项目介绍.4 1.3 软件相关信息.4 二 项目需求.4 2.1 概述.4 2.1.1 编写目的.4 2.1.2 项目概述.5 2.1.3 运行环境.5 2.2 项目需求分析.5 2.2.1 项目需求介

2、绍.5 2.2.2 自定义与其他类库.5 2.2.3 模块、流程描述.5 2.3 功能需求.6 2.3.1 功能需求点列表.6 2.3.2 其他功能需求.7 2.3.3 系统界面.7 2.4 系统输入输出需求.7 三软件概要设计.8 3.1 概述.8 3.1.1 编写目的.8 3.1.2 预期读者.8 3.2 系统概要设计说明.8 3.2.1 系统功能模块说明.8 3.2.2 系统功能模块结构图.8 四软件详细设计.11 4.1.系统的日历界面.11 4.1.1 系统主界面.11 4.1.2 系统的日历特色显示.13 4.2 系统日程界面的设计.14 4.2.1 日程界面的数据库准备.14 4

3、.2.2 数据库操作.15 4.3 添加日程界面.17 4.3.1 画图类.17 4.3.2 日程添加.18 4.4 日程界面.24 4.4.1 日程界面的布局.24 4.2.3 单一日程界面.26 4.2.4 标记日程日期.28 4.5 系统菜单项.29 4.5.1 日历界面的菜单项.29 4.5.2 其他界面菜单项实现.31 4.6 天气查询界面设计.32 4.7 系统主要实现类介绍.34 4.7.1 calendaractivity 类.34 4.7.2 calendarconvert 类.35 4.7.3 calendarview 类.35 4.7.4 scheduleall 类.36

4、 4.7.5 scheduleinfoview 类.37 4.7.6 scheduletypeview 类.37 4.7.7 lunarcalendar 类.38 4.7.8 specialcalendar 类.39 4.7.9 weatheractivity 类.40 五.总结.42 5.1 参考资料.42 5.2 总结语.42 一.项目概述 1.1 编写目的 本文档的编写主要为了介绍本项目的开发目的,项目需求,以及开发的情 况,将本系统的结构进行大概的介绍,以便用户更熟悉的了解本软件,让用户 在使用该软件前,对本软件的使用有一定的了解。 1.2 项目介绍 随着智能手机的逐渐普及及其功能的多

5、样化、实用化,移动设备逐渐成为 人们生活中不可或缺的一部分。目前,市场占有率最高的两个移动平台系统分 别为苹果公司的 ios,及 google 作为代表的 android 系统,移动端也逐渐成为 各行业商家的争夺之地,程序开发人员也将战场向移动端扩散。本项目为 android 移动端的日历日程管理软件,用于显示日历及记录日程,本软件可以 浏览公历日期,也可以显示农历日期及公历和农历假期信息,用户可以单击某 一天进行日程事件的添加,并浏览日程事件,用户可以跳转到指定日期查看该 日期的相关信息并查询当天的天气信息。本项目的开发是为方便 android 移动 端用户在处理日常事物时提供日历日程的服务

6、。 1.3 软件相关信息 软件名称:生活日历 软件版本:1.0 适用平台:android4.0 及以上 2项目需求 2.1 概述 2.1.1 编写目的 本文档的编写主要是描述本软件需要实现的功能,列出本软件的需求点, 作为开发人员开发目标系统及编程所需的基础,也作为项目完成验收时作为产 品是否符合要求的一个参考。本文档的预期读者为开发人员,用户。 2.1.2 项目概述 本项目的目标受众为所有 android 用户,android 系统现在已经成为相当主 流的移动端系统,本系统作为 android 端的应用软件,有很广泛的受众群。本 软件主要为用户提供日常生活的日历浏览,日程管理,天气查询等相关

7、服务。 待开发软件名称:生活日历 2.1.3 运行环境 android 4.0 及以上 2.2 项目需求分析 2.2.1 项目需求介绍 (1)日历浏览:显示日历信息,包括公历,农历,假日信息。日程添加: 在点击某一日期时跳转至日程添加界面,进行日程信息的添加。 (2)日程删除:在长按某一日程信息时出现是否删除的对话框。日程浏览: 点击菜单日程进入日程浏览界面。 (3)日期跳转:选择要查看的日期进行跳转。 (4)天气查询:输入某一中国城市进行当天天气的查询。 2.2.2 自定义与其他类库 1.ksoap2 android 用于调用 webservice 的第三方类库。 2.netutils 自定

8、义的获取手机网络状态的类 2.2.3 模块、流程描述 (1)主界面:用于显示日期信息,信息包括农历日期,公历日期,节日信 息,日程标记日期,头部 textview 包括年月信息及闰月,天干地支。 (2)日期跳转:用于用户在输入想要查看的日期后跳转到指定的日期。 (3)日期转换:用户在输入某一个日期后,输出改日期的农历日期。 (4)显示日程:用户点击此菜单选项后,系统跳入日程显示界面,显示用 户添加的所有日程。 (5)天气查询:用户点击此菜单按钮后悔弹出一个输入框,提示用户输入 城市,查询指定城市的天气信息。 (6)主界面 item:点击某一日期后,弹出日程编辑界面,用户可以编 辑 自己的日程并

9、进行保存。 据此得出本软件运行的大概流程,如图 2-1 图 2-1 软件运行流程 2.3 功能需求 2.3.1 功能需求点列表 功能名称功能描述输入预期输出 日历显示用于显示日期信息,包括 公立及农历你年月日,星 期,节假日信息,头部应 包含当前年月、生肖及天 支地干。 点击软件图标进 入软件 显示功能描述的 所有日期信息 日程添加添加日程,用户选择日程 类型,提醒重复方式,设 置时间信息。编辑完成后 可以保存。 点击主界面的 item(即某一日期) 进入日程编辑界 面 日程跳转用户输入某一日期,点击 按钮后跳转到指定日期 在指定方位内的 某一日期 跳转至指定日期 进入系统 主界面(日历显示界

10、面) 日期跳转 日期转换 显示日程 天气查询 (点击日期进入) 添加日程信息 日程浏览浏览所有日程信息列表, 可以浏览日程的相关信息 点击菜单的日程 按钮 显示所有日程 日程删除长按某一日程信息弹出对 话框,用户可以选择是否 删除日程。 长按想要删除的 日程 指定日程被删除, 或者放弃删除后 转至日程界面。 天气查询用户输入城市后,通过 webservice 查询指定 城市的信息并显示 点击菜单的天气 查询按钮,输入 中国的某一城市 显示指定城市的 天气信息 2.3.2 其他功能需求 a在日历显示界面,用户在屏幕进行左右滑动时,显示的日历的月份相应 的进入下一个月或者上一个月的日历。 b在日程

11、显示的界面,添加了添加日程菜单,用于在当日按添加日程。 c在日历显示界面,今天的日期应该特殊显示。 d在添加日程时用户应该可以自己选择想要的提醒类型。 2.3.3 系统界面 系统的界面及介绍: a主界面:默认为日历显示界面。 b日程添加界面:在点击某一日期后出现,进行日程的添加。 c日程显示界面:在点击主界面的日程按钮进入。 d天气查询:点击主界面菜单的天气查询进入。 2.4 系统输入输出需求 在本软件中,当在要求输入的时候应该进行输入检查,当输入的信息为空时 应该提醒用户输入信息;在输入时间信息时,若超出指定范围应弹出相应的 提 示信息;在输入城市进行天气查询时,若无指定城市则提示无此城市的

12、提示 信息。 三软件概要设计 3.1 概述 3.1.1 编写目的 本部分文档的编写是让读者尽快的了解本软件的概要设计,对软件的运行 流 程有一个大概的了解。 3.1.2 预期读者 本部分文档的预期读者是详细开发人员,开发人员,测试人员。 3.2 系统概要设计说明 3.2.1 系统功能模块说明 (1)日历查看模块:拥有一个完整的日历界面,包括头部的年月日、生肖、 闰年的显示,还有每个日期上都分别有阳历和阴历的日期显示,并且日历中 包含了各个重要的节日或纪念日等。在日历界面上每个日期都会跳到当前 日 期的日程添加界面或者是日程显示界面。日历界面上还有对存在日程的标 记,有利于人们更好的管理日程。

13、(2)日程管理模块:在本模块中包括总的日程显示页面和日历页面所跳转 到的日程显示界面或者是日程添加界面。总日程显示界面每一个日程都会有它 所包含的日期、时间、日程类型、重复类型和日程内容。日历日期所对应 的 日程显示界面也是相应的显示。而在日程添加界面中包含了显示界面所对 应 的各项数据、添加日程成功后会有对应日历日期的标记。另外也有对日程 的 一系列管理操作的功能。 (3)天气查询模块:在本模块中包括对指定城市天气的查询和显示。 3.2.2 系统功能模块结构图 (1)在程序设计分析的基础上,结合实际情况,得出本程序的功能模块结 构图。在结构图中包括了功能模块的表示及其中部分功能的实现原理。首

14、先是 一个总的功能模块的结构图,其中包括了系统设计时的总体功能概括,如 图 3-1: 模块描述: a.日程模块:主要是添加日程,显示日程概况,点击日程显示日程详细信息。 b.主界面:主界面即为日历显示界面,用于显示日历及有日程信息的日程的标 记。 c.天气模块:用于查询指定城市的天气信息。 d.总日程显示:即显示所有添加的日程列表。 e.单一日程显示:显示某一日程的详细信息。 图 3-1 系统模块结构图 (2)在日历模块分为以下几部分,如图 3-2: 日历日程系统 主界面 日程模块天气模块 日历显示 总日程显示 单一日程显示 天气查询 图 3-2 日历模块的组成 (3)在日程管理中的添加日程包

15、括以下几部分,如图 3-3: 图 3-3 添加日程界面的组成 (4)系统的主要类调用 a.程序启动先到 androidmanifest.xml 读取数据,启动 calendaractivity。接着加载 main.xml 初始化 layout,接着加 calendarview,该类引用了 calendarview 类,而 calendarview 类聚合了 bordertext、borderedittext和 bordertextview(这 3个类都是负责界面 的绘制) 。因此每次重绘都会调用这三个类。 b.在主界面按 menu 按钮可以选择进入自己相应的界面。选择“今 天”则 启动 cal

16、endaractivity 回到日历显示界面, ;选择“跳转” 时则调用系统的 datepickerdialog 类弹出日期选择界面;选择 “日程”时则启动 scheduleall 类显示所有日程信息,点击某一日程时则启动 scheduleinfoview 日历显示 日期显示 农历显示 节假日显示 添加日程界面 日程类型选择 重复类型选择 日程时间选择 日程内容书写 类显示详细的日程信息;选择“日期转换”时则启动calendarconvert 类来 进行日期的跳转;选择“天气查询”时则启动weatheractivity 类来进入 天气查询界面。 四软件详细设计 4.1.系统的日历界面 4.1.

17、1 系统主界面 系统主界面用到的类包括 calendaractivity,calendarview (1)首先是建立一个布局文件,上面一部分是显示年月日、生肖和农历的 干支纪年。使用的是一个 textview 类,对应的在日历的 calendaractivity 文 件中加入函数来添加头部的年份等信息。首先需要写了一个 calendarview 类, 这是为日历显示所写的一个类,在其中使用重载的方法定义了几个不同参数的 calendarview,用于不同的情况。在 calendaractivity 中实例化 calendarview 并且使用 calendarview 中的一个方法 calen

18、darview(this,getresources(),jumpmonth,jumpyear,year_c,month_c,da y_c);然后书写方法来添加头部的年份 闰哪月等信息。 (2)首先是对这个页面的头部进行布局,通过动态化的方法来完成。然后 建立一个可以进行改变值的 stringbuffer 类型的参数 textdate。对这个参数 进行 append 操作,添加例如年月日的知道参数里。其中有一个闰年判断的条件 函数,是通过 calv.getleapmonth()的值惊醒判断的。完成后对界面使用 settext 方法来赋值到界面上。最后是对界面的一些美化,同样使用动态布局 模式进行

19、。 (3)日历界面中主体日期部分显示的完成 在 calendaractivity 文件初始化实例对象时加入动态添加布局文件的方 法。我将此方法命名为 addgridview。在这个方法中同样是先进行动态化布局, 由于这里用的是 gridview,这个 gridview 应用于将一系列的空间组织成二维 网格的形式显示出来,所以适用于在这里进行的日期界面的建立。同样的首先 是动态化布局的建立,这可以实例化 gridview 为 gridview 参数进行的。在这 里需要添加 gridview 控件的列为 7,列宽为 46。并且还加上判断屏幕大小的条 件,这需要加入取得屏幕大小的对应函数,这里如果是

20、 800*480 屏幕的话,就 将列宽设置为 69。然后进行设置水平和竖直的间距、取值边框、设置居中等操 作。在这个方法里面还需加入个 ontouch 方法,用来将 gridview 中的触摸事件 回传给 gesturedetector,进行下面的触摸操作,即: /将gridview中的触摸事件回传给gesturedetector publicpublic booleanboolean ontouch(view v, motionevent event) returnreturn calendaractivity.thisthis.gesturedetector .ontouchevent(e

21、vent); ); 创建完日历的布局后,是在里面添加上具体的日期。就当前显示的页面来 说,是建立几个对应的参数,用来显示或传接数据。例如在函数开始时就 string daynumber = new string49; 这是作为对gridview控件内进行标记 序列的,用于下面条件语句的判断等,还有就是界面内的一些控件名的实例化。 然后是动态化的对页面进行属性值的设置。 其中在对日期中的第一行,即周一等值的这行,设置字的颜色及背景图。 得出这行的位置就需要通过对参数position(对应编号)进行判断是否在7以内。 下一步是当前月信息的显示,这也需要条件函数来判断是否为当前月,也 是来判断参数p

22、osition是否在范围内。在这个月中还需对当天来一个特殊化, 即设置当天日期的背景为图片current_day_bgc,字色为白。 在这些操作外,还需要得到一些数值来用于日期数据的插入,在这里建立 了个getcalendar方法,如判断是否为闰年的函数返回值isleapyear,某月的总 天数,某月的第一天是星期几,上个月总天数。在这方法中再执行方法 getweek,用来得出以后需要标记的日期,这个在后面来介绍。通过上述的步骤 基本完成了日历界面中的初步建设。 (3)由于日历菜单需要能通过手势触摸来进行翻页,所以要在总体布局下 建立一个 viewflipper 类,这个类是用来实现屏幕的切换

23、效果的。先是在布局 中建立这个类,然后实例化手势 gesturedetector 并取得布局中 viewflipper 用于下面的调用。然后是书写书写手势的各个方法,最主要的是 onfling 的方 法,在这里实现了页面的向左及向右滑动的操作,这个操作是由条件语句来实 现的,由滑动两点的 x 坐标的值进行差值计算,如果是起点减去重点大于 120 时着向左滑动,反之则向右滑动。在滑动操作开始,并且已切换一面后就需要 载入新的一张日历页面,这里又会用到参数 calv,当向左滑动时则将参数 calv 所代表的函数 calendarview 里的 jumpmonth 加 1,代表下一个月;当向右滑动

24、时则将参数 calv 所代表的函数 calendarview 里的 jumpmonth 减 1,代表上一 个月。为了完整性剩余的手势函数只是写了方法未使用。 4.1.2 系统的日历特色显示 在日历的显示中除了一些基本的日期显示,在日期页面头部有每年相应的 生肖和闰年显示,在日期上有每日的阴历以及节假日的显示。 这里有两个类,分别是 lunarcalendar 和 specialcalendar。在 lunarcalendar 里面包括干支纪年,阴历,生肖,节假日等信息。例如生肖则 是建立一个字节数组来记录十二生肖,并且用函数来传回参数对应的生肖。 finalfinal publicpublic

25、 string animalsyear(intint year) finalfinal string animals = newnew string 鼠, 牛, 虎, 兔, 龙, 蛇,马, 羊, 猴, 鸡, 狗, 猪 ; returnreturn animals(year - 4) % 12; 在 specialcalendar 是闰年的判断函数,每月天数,以及对每月的第一天 星期的判断。闰年通过传回年值通过函数进行判断,并传回布尔值。每月的天 数用 switch 进行判断赋值给月份天数的参数。对每月的第一天为星期几的判断 并指定。 主要代码如下: /指定某年中的某月的第一天是星期几 publ

26、icpublic intint getweekdayofmonth(intint year, intint month) calendar cal = calendar.getinstance(); cal.set(year, month-1, 1); dayofweek = cal.get(calendar.day_of_week)-1; returnreturn dayofweek; 最终的效果图如下图4-1: 图 4-1 日历界面的最终实现图 4.2 系统日程界面的设计 日程界面包括日程主界面(所有日程的显示)和对应日期日程的显示,日 程的添加等。在日程界面涉及到日程的数据存储,所以先介

27、绍下关于日程的数 据存储以及有日程的日期存储(为日历界面的标记服务) 。 4.2.1 日程界面的数据库准备 (1)数据库里表的建立 分别建立了 schedule 表(日程的表)和 scheduletagdate(标记日期所需 的表)android 提供了标准的数据库创建方式。建立 dbopenhelper 类继承到 sqliteopenhelper ,实现 oncreate 和 onupgrade 两个方法。oncreate 方法是 用于初次使用软件时生成数据库,onupgrade 方法是用于升级软件时更新数据 库表结构。 首先是 schedule 表的建立,在这个表中包括日程 id、日程类型

28、的 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.e

29、xecsql(create table if not exists scheduletagdate(tagid integer primary key autoincrement, + year integer,month integer,day integer,scheduleid integer); 建立完表后是继续写入onupgrade方法,这个方法会在数据库升级时被触发, 以便于软件升级时更新表结构。 publicpublic voidvoid onupgrade(sqlitedatabase db, intint oldversion, intint newversion) /更新数

30、据 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。 privateprivate dbopen

31、helper dbopenhelper = nullnull; publicpublic scheduledao(context context) dbopenhelper = newnew dbopenhelper(context, schedules.db); 4.2.2 数据库操作 下面就是对表中数据的操作了,包括了保存日程信息、查询某一条日程信 息、查询所有的信息、删除日程、将日程标记的日期保存到数据库中。 (1)保存日程信息,先是从日程添加页面里获取日程类型的id、日程重复 类型的id、日程正文内容、日程日程时间这几个参数,然后是使用 contentvalues类(这个类是一个键值对

32、,是用来存储名值对,它的名一般是 string类型,而值都是基本类型)来new一个参数,用这个参数的put方法将这 些个参数放入到数据库中。 values.put(scheduletypeid, schedulevo.getscheduletypeid(); values.put(remindid, schedulevo.getremindid(); values.put(schedulecontent, schedulevo.getschedulecontent(); values.put(scheduledate, schedulevo.getscheduledate(); 最后调用添加方

33、法insert。 db.insert(schedule, nullnull, values);/插入信息 另外需要movetofirst方法来判断是否为空,进行相关的操作。 (2)查询某一条日程信息,由于我这里的设计是通过对日程的点击来查看 当前点击日期的详细信息,即是根据日程的id来查看的。android sqlite的查 询方法是query方法,它的查询语句是: db.query(schedule, newnew stringscheduleid,scheduletypeid,remindid,schedulecontent, scheduledate, scheduleid=?, new

34、new stringstring.valueof(scheduleid), nullnull, nullnull, nullnull); 另外还需要的是判断语句,先用 cursor.movetofirst()判断 curor 是否为 空值,不为空则就给 cursor 赋值,空着直接 cursor.close()来关闭。 (3)查询所有的日程信息,由于所有日期可能不止一个,所以返回值设为 数组形式。查询依旧是用query方法,这里的的where语句相关的就直接设为 null值。其他的依旧与查询一条语句相仿。 (4)删除日程,这里的删除日程需要将日程及对应日期上的标记一起删除, 这样才可以便于管理

35、,删除使用的语句是delete。 db.delete(schedule, scheduleid=?, newnew stringstring.valueof(scheduleid);/删除日程信息 db.delete(scheduletagdate, scheduleid=?, newnew stringstring.valueof(scheduleid);/删除日程对应的日期标识信息 (5)将日程标志日期保存到数据库中,这里是为了将在日期上标识的信息 存储到数据库中,方法同第一步的保存相仿,只是数据的不一样,而且使用的 是数组形式。 forfor(intint i = 0; i dateta

36、glist.size(); i+)/以for循环的方式进行 datetag = datetaglist.get(i); contentvalues values = newnew contentvalues(); values.put(year, datetag.getyear();/放入年信息 values.put(month, datetag.getmonth();/放入月信息 values.put(day, datetag.getday();/放入日信息 values.put(scheduleid, datetag.getscheduleid(); /翻入日程的id db.insert(

37、scheduletagdate, nullnull, values); /插入到表scheduletagdate中 (6)只查询出当前日程的日期,这个查询语句是通过当前月的年和月信息 来得到日程标记上的所有信息。这里也是使用query语句进行查询的,只不过改 变了里面的查询使用的参数。所以方法类同于上面所有日程的查询。 (7)当点击每一个gridview中item时,查询出此日期上所有的日程标记 (scheduleid),通过点击后得到对应日期的年月日信息,然后用query方法得到 次日程标记的id,用于后面得到想到相关的日程信息。 query(scheduletagdate, newnew

38、stringscheduleid, year=? and month=? and day=?, newnew stringstring.valueof(year),string.valueof(month),string.valueof(d ay), nullnull, nullnull, nullnull); (8)关闭数据库。判断后直接关闭当前数据库。 ifif(dbopenhelper != nullnull) dbopenhelper.close(); 4.3 添加日程界面 新增界面是通过对日历界面上单一日期的点击来实现跳转的。 4.3.1 画图类 (1)首先是带下边框的textvie

39、w,主要代码如下: paint paint = newnew paint();/ 实例化一支画笔 paint.setcolor(android.graphics.color.black); / 设置所绘制的边框颜色为黑色 canvas.drawline(0, thisthis.getheight() - 1, thisthis.getwidth() - 1, thisthis.getheight() - 1, paint); / 绘制下边框 (2)带边框的edittext,代码如下: paint paint = new paint();/ 实例化一支画笔 paint.setstrokewidt

40、h(1);/设置空心现款 paint.setstyle(style.stroke);/设置样式 paint.setcolor(android.graphics.color.gray);/设置颜色 paint.setantialias(true);/抗锯齿方法 rectf rectf = new rectf(2,0,this.getwidth()-2,this.getheight()-2); /现在设置相关的参数用于下面的操作。 canvas.drawroundrect(rectf, 8, 8, paint);/画上圆弧 (3)最后一个是带边框的textview 这个与上述的edittext相类

41、似。完成这些边框类之后就是使用它们,这个 与以前的基本类相似,只是将布局中原来的基本类名类,如textview,改为对 应路径的名称为com.manage.bordertext.bordertextview。(bordertextview 是新建的textview类的文件名。) (4)新增日程界面的布局,文件名为schedule.xml (5)分别为日程类型及重复类型这两个类型的选择的点击框。 android:layout_below=id/scheduletop/文本框的位置设置 android:layout_width=160dp/文本框的宽 android:layout_height=4

42、0dp/文本框的高 android:drawableright=drawable/schedule_type 下面还有时间的点击修改框、日程文本框及最后的保存及取消的按钮。最后效 果如图 4-2: 图 4-2 日程添加界面效果图 4.3.2 日程添加 新增界面的上方有两个 textview 是用来选择类型的,另有一个时间显示框 可以用来显示传过来的时间或者修改时间。选择类型的实现方法以其中一个为 例 首先是取得这 textview 的位置,实例化它,以便于后面的使用, scheduletype = (bordertextview) findviewbyid(r.id.scheduletype)

43、; 点击时跳到选择界面并传值,跳转的时候需要获得原来界面上的日程类型,这 里需要在点击触发效果的方法上将数据传到类型选择页面上去,用于显示它的 默认值。 scheduletype.setonclicklistener(newnew onclicklistener() /日程类型的点击事件 publicpublic voidvoid onclick(view v) /点击时方法实现的内容 schtext = scheduletext.gettext().tostring(); intent intent = newnew intent(); intent.setclass(scheduleadd

44、activity.thisthis, scheduletypeview.classclass); /实现页面从日程添加页面到日程类型选择页面的跳转 intent.putextra(sch_remind, newnew intintsch_typeid,remindid); /跳转时需要传过去的数据,两个数据组成一个数组传过去 startactivity(intent);/运行 ); 这里还包括一个calendarconstant类,这个类是用于记录日程类型和重复类型 的字符数组,以便于类型选择的调用。 publicpublic classclass calendarconstant publi

45、cpublic finalfinal staticstatic string sch_type = 会议, 约会, 电话, 纪念日, 生日, 课程, 其他 ; / 日程类型的值 publicpublic finalfinal staticstatic string remind = 当天有效,每天重复,每 周重复,每月重复,每年重复;/重复类型的值 这里是存储scheduletypeview和scheduleremindview里面选项的value值。 这个页面是通过实例化来实现布局的: linearlayout.layoutparams params = newnew linearlayou

46、t.layoutparams(layoutparams.fill_parent, layoutparams.wrap_content); /设置宽与高 cc = newnew calendarconstant(); layout = newnew linearlayout(thisthis); / 实例化布局对象 layout.setorientation(linearlayout.vertical); layout.setbackgroundresource(r.drawable.schedule_bk); /设置背景图片 layout.setlayoutparams(params); 实例

47、化布局里的组件为后面使用时做准备,用于给这些组件添加各项参数。 group = newnew radiogroup(thisthis);/选择按钮组 btsave = newnew bordertextview(thisthis,nullnull);/保存按钮实例化 btcancel = newnew bordertextview(thisthis, nullnull); /取消按钮实例化 texttop = newnew bordertextview(thisthis, nullnull); /顶部文本实例化 这里有个从scheduleaddactivity传来的值,是日程新增界面里的日程类

48、型 的已选择的id值,用来选择radiogroup的默认选项 intent intent = getintent(); intint sch_remind = intent.getintarrayextra(sch_remind); ifif(sch_remind != nullnull) /判断不为空时进行下列的赋值 sch_typeid = sch_remind0; /日程类型的赋值 remindid = sch_remind1; /重复类型的赋值 forfor(intint i = 0 ; i cc.sch_type.length ; i+) radio = newnew radiobu

49、tton(thisthis); ifif(i = sch_typeid) /判断是否是当前选择的项 radio.setchecked(truetrue); /设置为已选择 radio.settext(cc.sch_typei); /设置文本内容 radio.setid(i); /设置编号 radio.settextcolor(color.black); /设置文本颜色 group.addview(radio); /设这系列的内容添加到数组中 将radiogroup加入到布局中去: layout.addview(group); 最终效果图如图4-3: 图 4-3 日程类型选择的效果图 radio

50、group的触发效果,再点击这里的每一个选项都会显示已选中并且会 将选择项的id值传到schtype_temp中用于后面的使用。 group.setoncheckedchangelistener(newnew oncheckedchangelistener() override /重写oncheckedchanged方法 publicpublic voidvoid oncheckedchanged(radiogroup group, intint checkedid) schtype_temp = checkedid;/给在上面建立的参数赋值 ); 添加确定和取消按钮(以确定按钮为例),按钮在

51、这边也是通过动态方法 来实施的,先新建一个布局参数 laybutton = newnew linearlayout(thisthis); 然后给参数设置各项属性,这些都是按钮所需要兼备的基本属性,有利于 按钮的美观与实用性, laybutton.setorientation(linearlayout.horizontal); laybutton.setlayoutparams(params); btsave.settextcolor(color.black); /设置文本颜色 btsave.setbackgroundresource(r.drawable.top_day); /设置背景 bts

52、ave.settext(确定); /设置按钮上的文本信息 btsave.setheight(47); /设置高 btsave.setwidth(160); /设置宽 btsave.setgravity(gravity.center); /设置按钮位置 btsave.setclickable(truetrue); /设置按钮的可点击性 laybutton.addview(btsave); /将保存按钮添加到按钮参数中 最后将整个 laybutton 的参数加入到整体布局中去,这里面包括添加的保 存和取消按钮这两个功能按钮。 layout.addview(laybutton); 按钮的界面建立以后

53、这需要为这两个按钮添加它上面的触发效果,首先是确定 按钮,这个按钮的设计是当点击按钮后则会将已得到的schtype_temp值赋给 sch_typeid,然后继续通过传值的方法将其返还到日程添加界面去。这里传值 的方法与从日程添加界面传值过来的方法相类似。 /触发确定按钮 btsave.setonclicklistener(newnew onclicklistener() publicpublic voidvoid onclick(view v) sch_typeid = schtype_temp; /将上面得到的schtype_temp默认值或改变后的值传给传sch_typeid。 inte

54、nt intent = newnew intent(); intent.setclass(scheduletypeview.thisthis, scheduleaddactivity.classclass); /设置跳转的class文件参数 intent.putextra(schtype, sch_typeid); /将上面得到的sch_typeid传到schtype中以便于调用 startactivity(intent); ); 下一步是时间显示框的获得时间和修改时间后的获得,时间框时间的获得 需要从日期页面传入时间数据到本页面上来,这里的一系列数据都放在名为 scheduledate的数组

55、中。 intent.putstringarraylistextra(scheduledate, scheduledate);/需要传 递的数据 intent.setclass(calendaractivity.thisthis, scheduleinfoview.classclass);/用于实现从单一日程界面跳转到日程界面上去 intent.putextra(scheduleid, scheduleids); startactivity(intent); /运行 其中scheduleids的数据的取得是通过数据库来取的,方法用的就是 scheduledao文件中的数据库查询方法getsche

56、dulebytagdate方法来实现的,通 过所点击日期上的标记来得到对应日期相关联的日程信息,可以是一个或者几 个,所以使用的是字符串数组的形式得到日程的id值。 string scheduleids = dao.getschedulebytagdate(integer.parseint(scheduleyear), integer.parseint(schedulemonth), integer.parseint(scheduleday); 然后是任务页面获得时间信息,这里的时间信息包括年月日和星期,都是 用于显示在日程选择框上的。而这些日期信息都是从scheduledate这个数组中 得

57、来,存在于数组的各个位置,首先取得年月日和星期的信息,用于显示。 scheduleyear = scheduledate.get(0);/日程年份 schedulemonth = scheduledate.get(1); /日程月份 tempmonth = schedulemonth; /日程年份 ifif (integer.parseint(schedulemonth) 10) schedulemonth = 0 + schedulemonth; /判断如果当前月份小于10时则在月号前加0以使得其美观。 scheduleday = scheduledate.get(2); tempday =

58、 scheduleday; ifif (integer.parseint(scheduleday) 10) scheduleday = 0 + scheduleday; /判断如果当前天小于10时则在天前加0 week = scheduledate.get(3); string hour_c = string.valueof(hour); /将小时数赋值给所设参数 string minute_c = string.valueof(minute); /将分钟数赋值给所设参数 ifif(hour 10) hour_c = 0+hour_c; /判断如果当前小时数小于10时则在小时数前加0 ifif

59、(minute 0)/判断正文的长度 content = content.substring(0, startline)+.; elseelse ifif(content.length() 30) content = content.substring(0, 30)+.; scheduleinfo = calendarconstant.sch_typevo.getscheduletypeid()+n+vo. getscheduledate()+n+content; /正文的书写格式 scheduleid = vo.getscheduleid(); createinfotext(schedule

60、info, scheduleid); elseelse scheduleinfo = 没有日程; createinfotext(scheduleinfo,-1); /日程空时的显示 (3)设置监听方法来跳转到scheduleinfoview来显示单条任务信息,当点 击这些日程中一个时会跳转到这条日程所对应的单一日程的显示界面。即是在 日程的显示的每一个框中添加触发事件,点击后者会跳转到相应的页面,并且 传入所需的信息。 /点击每一个textview就跳转到shceduleinfoview中显示详细信息 info.setonclicklistener(newnew onclicklistener

温馨提示

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

评论

0/150

提交评论