手机安卓开发设计报告-天气预报A 本文关键词:天气预报,报告,设计,手机,卓开发
手机安卓开发设计报告-天气预报A 本文简介:湘潭大学课程设计报告课程名称______手机安卓开发__________课题名称______天气预报APP__________指导老师______周唯____________姓名____黄柳________学号___2012600719_________班级____12计2班________小组__
手机安卓开发设计报告-天气预报A 本文内容:
湘潭大学课程设计报告
课
程
名
称______手机安卓开发__________
课
题
名
称______天气预报APP__________指
导
老
师______周唯____________
姓
名____黄柳________
学
号___2012600719_________
班
级____12计2班________
小
组______棒棒糖_______
时
间____2015年1月26
日_____
一、
需求分析
(一)
引言
1.
编写目的
1.1
为用户提供一个显示天气预报的软件,可以根据百度地图显示用户需求的城市位置,以及用图标表示各城市对应的气象信息,可以简洁的表示出“晴、雨、雪”和“气温”气象信息。
2.
项目风险
2.1
(项目风险识别是指找出影响项目目标顺利实现的主要风险因素,并识别出这些风险究竟有哪些基本特征、可能会影响到项目的那些方面。)
2.2
联网收费视用户电话运营商的收费标准决定
2.3
手机或者无线信号不好时,可能无法连接或更新天气情况
3.
预期读者和阅读建议
3.1
预期读者:会使用已经安装安卓系统的手机或者平板电脑及其他移动设备的用户
3.2
阅读建议:读者应通过该文档可以了解相关项目的需求分析、使用注意事项以及可能存在的风险
4.
产品范围
2.2
手机,平板电脑,MP4,导航仪,上网本,电纸书等使用安卓系统的数码领域
(二)
综合描述
1.
产品的状况
1.1
Android是一种以Linux为基础的开放源代码操作系统,主要使用于便携设备。目前未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由Andy
Rubin开发,最初主要支持手机。2005年由Google收购注资,并组建开放手机联盟开发改良,逐渐扩展到平板电脑及其他数码领域上。我们开发的相关项目正是一个在安卓平台上开发的软件,可以用这个软件来实现用户在一些简单的手持设备如手机或者平板电脑等上面及时的了解到用户所在城市的天气预报。
2.
产品的功能
2.1
天气信息获取
2.2
天气信息显示
3.
系统配置功能
3.1
用户类和特性
安卓平台用户:安卓新用户可以使用软件来了解用户所在城市的天气预报。熟悉安卓平台用户还可以选择对相关软件的系统按自己的喜好进行配置并保留自己的个性化系统配置。
安卓软件开发者:安卓软件开发者(喜好者)可以通过相关的开源代码来了解软件运行的原理。
3.2
运行环境
软件需要在支持安卓系统的可移动设备中正确安装才能正常运行。安卓版本需在2.2及以上,同时建议用户如果是在手机移动设备使用的话,需确保手机支持联网服务。
3.3
设计和实现上的限制
Eclipse是开发相关应用软件的首选集成开发环境,安卓开发环境首先需要安装支持java应用软件运行的java开发软件包(即JDK),然后安装集成开发环境Eclipse,最后安装Android
SDK的Eclipse的ADT插件。
Android
SDK和Eclipse的ADT插件是必须使用的。
软件支持高效、快速的数据存储方式,包括快速数据存储方式SharedPreferences、文件存储和轻量级关系数据块SQLite,可软件可以使用适合的方法对数据进行进程保存和访问。
3.4
假设和约束(依赖)
软件必须在安卓系统下才可以正常运行,若需要获取天气更新或者是短信服务,需确保用户的数码设备支持联网及短信服务。
(三)
外部接口需求
1
用户的手机设备可以支持联网。
2
用户界面
3
软件接口
软件提供轻量级的进程间通信机制Intent,实现跨进程组件通信。
4
访问硬件的API库函数通讯接口
4.1
HTTP
协议:有多种接口可以调用你可以用Java类库封装的HttpConnection
或者用Apach的开源项目的
HttpGet
或者HttpPost
,服务器端
需要
编写
Serlvet来响应客户端的请求。
4.2
Sokcet
:
就是
服务器端
不断监听
双方约定好的端口号,客户端通过服务器IP去请求连接,连接成功后,得到Socket
的输入输出流,直接操作即可。
(四)
系统功能需求
天气信息显示和获取
功能描述:需有一个显示天气情况的用户界面,要求百度地图显示各城市位置(如:北京、长沙、广州等3-5个城市),以及用图标表示各城市对应的气象信息,表示出“晴、雨、雪”和“气温”简洁气象信息。
输入输出信息:
输入:当触摸某一城市对应的气象图标时,显示该城市当天的温度、湿度、风向和雨雪详细天气信息,并预报该城市后面几天的气象信息。
输出:气象信息的获取,从百度上获取天气预报信息,这些天气数据是通过后台服务获取的,这个后台服务可以按照一定时间间隔,并将各城市的天气信息保存到SQLite数据库中。
二、
概要设计
概要设计
1.
Ui界面
我们的ui界面秉承着清新的风格开发出来的。
整个软件界面使用一个线性布局,让所有的元素从屏幕上方向下填充,并给整个线性布局进行权重划分。
线性布局的最上方是一个TextView,显示当前城市的名字,接着往下是一个相对布局,相对布局的左侧是天气的图片,右侧是三个天气相关的参数。
接着是一个线性布局,布局的左上方是三个TextView,分别显示“预报”,“趋势”,“指数”功能,通过点击相应的TextView,下方的一个线性布局展现不同的功能。
功能面板文字的下方是一个大的线性布局,用来显示未来三天的天气情况。在这个大的线性布局中,又含有三个小的线性布局,这三个小线性布局中包含了日期,天气图片和风力状况等(这些控件从上到下垂直居中显示)。
通过给整个XML文件中LinearLayout布局的的子级布局添加权重,让各个部分从上到下有序的显示,让当前城市名称在屏幕的上方显示,功能面板位于屏幕下方显示,以匹配不同尺寸屏幕,让软件的显示效果更好。软件的整体布局风格是清新,优美,大方。
2.
功能设计
功能上实现实时的获取天气信息,获取百度api返回数据,解析百度api返回的json数据,根据解析到的数据绘制气温趋势图,并将数据反馈到app上的相应的区域。
通过使用ViewPager类,来实现天气预报软件中多个城市间的无缝页面切换。
由于组员都缺少JAVA开发经验,对安卓开发也不熟悉,所以我们决定采用调用API的方法来实时获取不同城市的天气预报数据,在这次项目中我们将采用百度的车载API。通过HttpClient类和AsyncTask异步类来获取网络数据。最后通过Gson类来解析获取的网络数据,并给页面中的所有的布局空间设置id,在AsyncTask得到网络数据之后将这些数据同步到软件界面上,呈现给用户。
三、功能模块
我主要负责监听程序的设计,监听用户按键,并进行相应的动作。
只要用户滑动面板,就切换到下一个城市,并获得下一个城市的天气数据,
显示在面板上。每隔15分钟自动更新天气数据。
主要代码如下:
下面的代码处理网络连接部分,用GSON解析网络上获得的Json网页:
下面代码访问网络:
篇2:中兴java软件安卓开发实习报告
中兴java软件安卓开发实习报告 本文关键词:中兴,实习报告,软件,java,卓开发
中兴java软件安卓开发实习报告 本文简介:中兴实习报告短短的一个月很快就过去了,在南昌中兴软件实训中心的实习就过去了。虽然只有短短的一个月,但我学到了许多知识,熟悉了软件项目开发的流程,也很好的增强了自己的动手能力。在这个月中,我们学习了JAVA的基础知识以及安卓的开发。我是一名即将大四的学生,用校园里的话来讲就是“奔四”的人。纵观现在的就
中兴java软件安卓开发实习报告 本文内容:
中兴实习报告
短短的一个月很快就过去了,在南昌中兴软件实训中心的实习就过去了。虽然只有短短的一个月,但我学到了许多知识,熟悉了软件项目开发的流程,也很好的增强了自己的动手能力。
在这个月中,我们学习了JAVA的基础知识以及安卓的开发。
我是一名即将大四的学生,用校园里的话来讲就是“奔四”的人。纵观现在的就业形势,国家高校的扩招,世界金融危机的横扫,大学生应该有一种居安思危的紧迫感,特别是对于已经渡过三年的大学的我来说,毕业不是一个遥远的名词,找工作更不是水到渠成的动词了。宝剑锋从磨砺出,梅花香自苦寒来,缺少了平时的锻炼,缺少了厚积当然就不能薄发了。首先我得有思想上的紧迫感,在学校所学都是理论性的知识,社会经验则是乏之又乏。一个综合能力强的人才是这个社会所看好的,“社会需要我干什么我就能干什么”是我个人的奋斗目标。有了强大的精神动力,有了坚如盘石的毅力,相信成功的一天绝不遥远。
首先,我的自学能力得到了加强。在实习的前几天主要进行的是与java有关的知识讲解及其他预备知识的普及。在这之前由于种种原因我没有系统的学过java,所以对于java我几乎一无所知。但是我曾学习过c++,所以对语言的接受与理解速度还不算太慢—尽管老师讲的比较快。但我还是竭尽所能的去跟上老师的节奏。在这个过程中老师曾给我打过一剂预防针---对语法的理解无需太清晰,会用就可以。所以我只需了解大概框架及原理即可。这就教会了我自学的一种方法---可以在第一遍时不求甚解,先了解知识框架,之后再在使用的过程中不断的加深对知识的理解,从而较快的学会知识并利用之用于实践。
其次我的实际的操作能力得到了加强。知识讲解告一段落之后我们便进入到了紧张而又短暂的项目中。但不得不说刚开始就遇到了一鼻子灰---代码书写总是出错。由于对原理理解的不够透彻,语言使用缺乏足够经验所以进度极慢---尽管任务很少。在经过了多次讨论以及与老师的交流我们渐渐的对项目有了一个较为合理的理解,所以再次投入的过程就比较顺利。在这个过程中我明白实践与理论的差距及二者不可分割的关系。
在张老师讲完java基础后,随着尧老师跟我们讲了安卓的基础开发。
刚开始接触Android感觉到它很有意思,在界面开发上和web也可以形成了相通的架构,更加方便,视觉上也是非常的酷,在前期我通过的大量的Android
SDK开发范例大全中的例子以及Android提供的APIDEMOS进行学习,尽管例子之间的连接比较零散,不过通过这些例子的学习我可以学习到了很多和以前java上相通的思想。
我在为期一个月的实习中学到了很多在课堂上根本就学不到的知识,收益非浅.
通过半一个月的android实习,基本掌握了Android应用程序开发的一般流程。对常用控件基本掌握其用法,对其事件的监听方法也基本掌握。学习Android不仅是对前沿开发技术的了解,也是对编程知识的一次提升。
通过学习Android的控件、布局、Activity、Service等一系列基础知识,对整个Android的开发有了大致的了解。例如:
要的布局(或者控件),在学习界面中,我发现Android为我们提供了很好的类似反射机制,通过Layout文件夹下的配置文件,可以快速的形成界面,在配置文件可以设置属性或者样式都是很快捷方便。对比较特殊的界面也可以通过处理嵌入到指定的界面,同样你可以通过java代码直接创建View进行添加,不过这种方式比较复杂。对一些点击、选中、按键等处理的事件,界面之间的
跳转Intent管理,通过Bundle对数据在界面之间进行传输。
在手机交互式通信服务中,学习了Android手机之间进行短信发送、广播、对广播的监听、服务等,在Service类中没有context,可以通过Handler来每秒反复运行,自动送出系统广播信息,同时在这里我们也知道可以设计一个常用的变量类,设计一个当前的CurrentActivity这个变量进行控制,进行处理。
在Android编程过程中巩固熟悉了Java的编程。由于Android应用程序的开发离不开Java的支持,所以基础的Java知识是必须的。Android系统是基于Linux的手机操作系统平台,要深入系统的学习Android,不仅仅是有Java和Android应用开发,必须要具备Linux,C/C++高级编程才能深入的涉及Android
Framework和Android内核开发。成为Android开发的高素质人才。所以,在后续对Android的学习中可能会看一些较底层的书籍。
由于这次实习时间较短,对于Android应用程序的高级编程讲的很少,是这次实习中的不足。要想开发一些好的应用程序,还需要更多的知识支持。在做实习最后的项目时,遇到了很多平时没有遇到或者没有特别关注的问题,如常见的Activity忘记注册,对SD卡存取需要权限,在写SQL语句时细微的错误就可能导致程序运行错误。这些问题只有自己在实际开发中才能体会到并且解决,并且在解决后可以长时间的记住。
通过Android的实习,我们在大四毕业前,我们又掌握了一项新的前沿的开发技能,也有了更多的发展方向,这在以后的找工作的过程中无疑为我们增加了砝码,也可以成为我们的一项兴趣爱好,可以根据我们自己的需要设计一些小的程序。总之,在这次实习中,我获得了很多东西,提高了自己的编程技巧和编程方法,并且认识了Android应用程序的开发,以及加深了对Java的认识。
最后,通过实习,我收获了很多东西,特别是编程方面的,这对即将毕业的我们来说,这次实习是一次较为珍贵的充电。
篇3:创新实践安卓软件开发报告
创新实践安卓软件开发报告 本文关键词:实践,创新,报告,开发,软件
创新实践安卓软件开发报告 本文简介:沈阳理工大学课程设计专用纸No18摘要从没有比现在更好的时机,能通过为Android编写程序,将我们的创意带人生活中。安卓AppStore给了我们巨大的机会,程序的开发也从未像如今这样简单和广泛。你不仅能够拥有数百万的潜在客户还能拥有尖端的开发工具和硬件。2008年Google推出了一款名为Andr
创新实践安卓软件开发报告 本文内容:
沈阳理工大学课程设计专用纸No18
摘要
从没有比现在更好的时机,能通过为Android编写程序,将我们的创意带人生活中。安卓App
Store给了我们巨大的机会,程序的开发也从未像如今这样简单和广泛。你不仅能够拥有数百万的潜在客户还能拥有尖端的开发工具和硬件。2008年Google推出了一款名为Android的开源智能手机操作系统,它采用Linux内核,开放手机联盟(OHA)成员可以任意使用和修改SDK包,系统的开源性使其具有良好的拓展性。而很少受到早期手持设备的硬件和软件限制。
本设计在对Android开发有初步了解的情况下,设计一个有代表性的Android商业App,通过对商业实例的学习,了解真实项目的系统构架、引擎设计,了解声音、视频、图片处理等相关的编程技术要点、以便在实际的游戏项目开发中借鉴和综合应用这些知识。
关键字:Android;APP;
目录
1
开发工具与环境1
1.1
下载并安装eclipse1
1.2
下载并安装jdk1
1.3开发环境简介1
1.4开发环境搭建2
1.4.2安装Eclipse4
1.4.3
安装Android
SDK4
1.4.4
ADT安装创建AVD4
2
系统的设计与分析5
2.1
Android系统的概述5
2.1.1应用层5
2.1.2应用程序框架5
2.1.3系统运行库6
2.1.4
Linux内核7
2.3
日历流程图7
3
系统详细设计8
3.1
日历其实是由3个预制的数据集组成8
3.2
视图的生成8
3.3当所示日期发生选择变更是的视图更新10
3.4
启动和运行13
4
运行结果14
4.1
系统启动14
4.2
进入日历14
4.4
退出应用15
5
结论16
参考文献17
1
开发工具与环境
1.1
下载并安装eclipse
Eclipse
版本有要求:The
“Eclipse
Classic“version
is
recommended.
Otherwise,a
Java
or
RCP
version
of
Eclipse
is
recommended.
1.下载eclipse只需登录到http://www.jsfw8.com/javase/downloads下载最新的JDK安装程序。
然后双击刚下载的JDK安装程序jdk-7u21-windows-i586,根据提示将JDK安装到默认目录。
右键单击我的电脑,依次选择属性/高级/环境变量,在系统变量中新建一个名为JAVA_HOME,值为“C:/Program
Files/Java/jdk1.7.0_21”的环境变量。
再打开Path环境变量,在最后加上“C:/Program
Files/Java/jdk1.7.0_21/bin;”,单击“确定”按钮即可。
1.3开发环境简介
JDK(Java
Development
Kit)是Sun
Microsystems针对Java开发员的产品。自从Java诞生以来,JDK已经成为最广泛的Java
SDK。JDK是整个Java的核心内容,包括了Java运行环境、Java工具和Java基础类库三部分。从Sun的JDK1.5开始,提供了一些非常使用的功能,其版本也不断更新,运行效率得到了非常大的提高。
Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组建构建开发环境。Eclipse附带了一个标准的插件集,包括Java开发工具(Java
Development
Kit,JDK)。
Android
SDK即软件开发工具包(software
development
kit)。被软件开发工程师用于为特定的软件包、软件架构、硬件平台、操作系统等建立应用软件工具的集合。因此Android
SDK是Android专属的开发工具包。其授权协议为Apache,开发语言为Java、需要Android操作系统的支持。
1.4开发环境搭建
下载安装Java开发包(JDK)。选择“windows
offline
installation,multi-language”,根据屏幕提示完成安装。
打开计算机>点右键>属性>高级系统设置>环境变量,在系统变量中添加。
图1.1环境变量
新建JavaHome:C:/Program
Files/Java/jdk1.6.0_10,如图1.2。
图1.2JavaHome
新建CLASSPATH:.;%JavaHome%/lib/dt.jar;%JavaHome%/lib/tools.jar;,如图1.3。
图1.3
CLASSPATH
编辑Path,在变量值前添加:%JavaHome%/bin;,如图1.4。
图1.4
Path
在CMD窗体中输入java
–version,如果屏幕出现如图1.5一样的代码信息,说明JDK安装成功了。
图1.5
CMD窗体
1.4.2安装Eclipse
选择标有“eclipse
IDE
for
java
developers“的文件进行安装。进入解压后的目录,就可以看到一个名为“eclipse.exe”的可执行文件,双击此文件直接运行,eclipse
能自动找到用户先期安装的JDK路径
1.4.3
安装Android
SDK
将下载的android-sdk压缩包解压为文件放于自选位置。在Eclipse中选择Windows>Preferences>Android>Browse找到解压文件>Apply>OK。打开环境变量,编辑Path,在变量值前添加:C:
/java/adt-bundle-windows-x86-20130522/sdk/tools;,如图1.6。
图1.6
Path
1.4.4
ADT安装创建AVD
打开SDK
Manager.exe,选择tools>Manage
AVDs,在Android
Virtual
Device
Manager中点击New,输入AVD的信息,点OK完成AVD的创建。如图1.7。
图1.7
AVD
2
系统的设计与分析
2.1
Android系统的概述
Android是一个包括操作系统,中间件以及一些重要应用程序的专门针对移动设备的层次结构的软件集。作为一个层次结构的软件集,一定有一个层次的系统构架,下图为Android的构架图:
图2.1
Android
系统构架
2.1.1应用层
Android会同一系列核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用JAVA语言编写的。
2.1.2应用程序框架
开发人员也可以完全访问核心应用程序所使用的API框架。该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。隐藏在每个应用后面的是一系列的服务和系统,其中包括:丰富而又可扩展的视图(Views),可以用来构建应用程序,
它包括列表(lists),网格(grids),文本框(text
boxes),按钮(buttons),
甚至可嵌入的web浏览器;
内容提供器(Content
Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库),
或者共享它们自己的数据:资源管理器(Resource
Manager)提供
非代码资源的访问,如本地字符串,图形,和布局文件(
layout
files
);通知管理器
(Notification
Manager)
使得应用程序可以在状态栏中显示自定义的提示信息;
活动管理器(
Activity
Manager)
用来管理应用程序生命周期并提供常用的导航回退功能。
2.1.3系统运行库
系统运行库包括程序库和Android运行库。首先是程序库,
Android
包含一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过
Android
应用程序框架为开发者提供服务。以下是一些核心库:系统
C
库
-
一个从
BSD
继承来的标准
C
系统函数库(
libc
),
它是专门为基于
embedded
linux
的设备定制的;媒体库
-
基于
PacketVideo
OpenCORE;该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括MPEG4,H.264,MP3,AAC,AMR,JPG,PNG
;
Surface
Manager
-
对显示子系统的管理,并且为多个应用程序提
供了2D和3D图层的无缝融合;
LibWebCore
-
一个最新的web浏览器引擎用,支持Android浏览器和一个可嵌入的web视图;SGL
-
底层的2D图形引擎;3D
libraries
-
基于OpenGL
ES
1.0
APIs实现;该库可以使用硬件
3D加速(如果可用)或者使用高度优化的3D软加速;FreeType
-位图(bitmap)和矢量(vector)字体显示;SQLite
-
一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。其次是Android
运行库,Android
包括了一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik被设计成一个设备可以同时高效地运行多个虚拟系统。
Dalvik虚拟机执行(.dex)的Dalvik可执行文件,该格式文件针对小内存使用做了优化。同时虚拟机是基于寄存器的,所有的类都经由JAVA编译器编译,然后通过SDK中
的
“dx“工具转化成.dex格式由虚拟机执行。Dalvik虚拟机依赖于linux内核的一些功能,比如线程机制和底层内存管理机制。
2.1.4
Linux内核
Android
的核心系统服务依赖于
Linux
2.6
内核,如安全性,内存管理,进程管理,
网络协议栈和驱动模型。
Linux
内核也同时作为硬件和软件栈之间的抽象层。
2.3
日历流程图
iPlanet日历S2erver2.x
Run
db_recover
下载和安装Calender
Server5.1.1
运行db_upgrade
运行les2milgrate
Sun
ONE
下载和安装Calender
Server6.x
运行cs5migrate
Sun
Java
System
Calender
Server
6
Netscape
Calender
Server4.x
下载和安装Calender
Server5.1.1
运行ncs4migrate
图2.2
流程图
3
系统详细设计
3.1
日历其实是由3个预制的数据集组成
日历整个系统是由3个GridView组成,3个GridView分别预制当前月、上个月和下个月当发生滑动事件的时候产生替换,同时在加载时重新生成。
private
Context
mContext
=
BaseCalendar.this;
private
GridView
title_gView;
private
GridView
gView1;//
上一个月
private
GridView
gView2;//
当前月
private
GridView
gView3;//
下一个月
//
private
GridView
gView1;
boolean
bIsSelection
=
false;//
是否是选择事件发生
private
Calendar
calStartDate
=
Calendar.getInstance();//
当前显示的日历
private
Calendar
calSelected
=
Calendar.getInstance();
//
选择的日历
private
Calendar
calToday
=
Calendar.getInstance();
//
今日
private
CalendarGridViewAdapter
gAdapter;
private
CalendarGridViewAdapter
gAdapter1;
private
CalendarGridViewAdapter
gAdapter3;
//
顶部按钮
private
Button
btnToday
=
null;
private
RelativeLayout
mainLayout;
//
private
int
iMonthViewCurrentMonth
=
0;
//
当前视图月
private
int
iMonthViewCurrentYear
=
0;
//
当前视图年
private
int
iFirstDayOfWeek
=
Calendar.MONDAY;
private
static
final
int
mainLayoutID
=
88;
//
设置主布局ID
private
static
final
int
titleLayoutID
=
77;
//
title布局ID
private
static
final
int
caltitleLayoutID
=
66;
//
title布局ID
private
static
final
int
calLayoutID
=
55;
//
日历布局ID
3.2
视图的生成
生成一个主视图
//
生成内容视图
private
View
generateContentView()
{
//
创建一个垂直的线性布局(整体内容)
viewFlipper
=
new
ViewFlipper(this);
viewFlipper.setId(calLayoutID);
mainLayout
=
new
RelativeLayout(this);
//
创建一个垂直的线性布局(整体内容)
RelativeLayout.LayoutParams
params_main
=
new
RelativeLayout.LayoutParams(
LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);
mainLayout.setLayoutParams(params_main);
mainLayout.setId(mainLayoutID);
mainLayout.setGravity(Gravity.CENTER_HORIZONTAL);
LinearLayout
layTopControls
=
createLayout(LinearLayout.HORIZONTAL);
//
生成顶部按钮布局
generateTopButtons(layTopControls);
//
生成顶部按钮
(上一月,下一月,当前月)
RelativeLayout.LayoutParams
params_title
=
new
RelativeLayout.LayoutParams(
LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
params_title.topMargin
=
5;
//
params_title.addRule(RelativeLayout.ALIGN_PARENT_TOP,20);
layTopControls.setId(titleLayoutID);
mainLayout.addView(layTopControls,params_title);
calStartDate
=
getCalendarStartDate();
setTitleGirdView();
RelativeLayout.LayoutParams
params_cal_title
=
new
RelativeLayout.LayoutParams(
LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
params_cal_title.addRule(RelativeLayout.BELOW,titleLayoutID);
//
params_cal_title.topMargin
=
5;
mainLayout.addView(title_gView,params_cal_title);
CreateGirdView();
RelativeLayout.LayoutParams
params_cal
=
new
RelativeLayout.LayoutParams(
LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
params_cal.addRule(RelativeLayout.BELOW,caltitleLayoutID);
mainLayout.addView(viewFlipper,params_cal);
LinearLayout
br
=
new
LinearLayout(this);
RelativeLayout.LayoutParams
params_br
=
new
RelativeLayout.LayoutParams(
LayoutParams.FILL_PARENT,1);
params_br.addRule(RelativeLayout.BELOW,calLayoutID);
br.setBackgroundColor(getResources().getColor(R.color.calendar_background));
mainLayout.addView(br,params_br);
return
mainLayout;
}
3.3当所示日期发生选择变更是的视图更新
在主视图所示日期改变时更新,主要代码如下:
//
根据改变的日期更新日历
//
填充日历控件用
private
void
UpdateStartDateForMonth()
{
calStartDate.set(Calendar.DATE,1);
//
设置成当月第一天
iMonthViewCurrentMonth
=
calStartDate.get(Calendar.MONTH);//
得到当前日历显示的月
iMonthViewCurrentYear
=
calStartDate.get(Calendar.YEAR);//
得到当前日历显示的年
String
s
=
calStartDate.get(Calendar.YEAR)
+
“-“+
NumberHelper.LeftPad_Tow_Zero(calStartDate
.get(Calendar.MONTH)
+
1);
btnToday.setText(s);
//
星期一是2
星期天是1
填充剩余天数
int
iDay
=
0;
int
iFirstDayOfWeek
=
Calendar.MONDAY;
int
iStartDay
=
iFirstDayOfWeek;
if
(iStartDay
==
Calendar.MONDAY)
{
iDay
=
calStartDate.get(Calendar.DAY_OF_WEEK)
-
Calendar.MONDAY;
if
(iDay
<
0)
iDay
=
6;
}
if
(iStartDay
==
Calendar.SUNDAY)
{
iDay
=
calStartDate.get(Calendar.DAY_OF_WEEK)
-
Calendar.SUNDAY;
if
(iDay
<
0)
iDay
=
6;
}
calStartDate.add(Calendar.DAY_OF_WEEK,-iDay);
}
private
Calendar
getCalendarStartDate()
{
calToday.setTimeInMillis(System.currentTimeMillis());
calToday.setFirstDayOfWeek(iFirstDayOfWeek);
if
(calSelected.getTimeInMillis()
==
0)
{
calStartDate.setTimeInMillis(System.currentTimeMillis());
calStartDate.setFirstDayOfWeek(iFirstDayOfWeek);
}
else
{
calStartDate.setTimeInMillis(calSelected.getTimeInMillis());
calStartDate.setFirstDayOfWeek(iFirstDayOfWeek);
}
return
calStartDate;
}
public
class
TitleGridAdapter
extends
BaseAdapter
{
int[]
titles
=
new
int[]
{
R.string.Sun,R.string.Mon,R.string.Tue,R.string.Wed,R.string.Thu,R.string.Fri,R.string.Sat
};
private
Activity
activity;
//
construct
public
TitleGridAdapter(Activity
a)
{
activity
=
a;
}
@Override
public
int
getCount()
{
return
titles.length;
}
@Override
public
Object
getItem(int
position)
{
return
titles[position];
}
@Override
public
long
getItemId(int
position)
{
return
position;
}
@Override
public
View
getView(int
position,View
convertView,ViewGroup
parent)
{
LinearLayout
iv
=
new
LinearLayout(activity);
TextView
txtDay
=
new
TextView(activity);
txtDay.setFocusable(false);
txtDay.setBackgroundColor(Color.TRANSPARENT);
iv.setOrientation(1);
txtDay.setGravity(Gravity.CENTER);
LinearLayout.LayoutParams
lp
=
new
LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);
int
i
=
(Integer)
getItem(position);
txtDay.setTextColor(Color.WHITE);
Resources
res
=
getResources();
if
(i
==
R.string.Sat)
{
//
周六
txtDay.setBackgroundColor(res.getColor(R.color.title_text_6));
}
else
if
(i
==
R.string.Sun)
{
//
周日
txtDay.setBackgroundColor(res.getColor(R.color.title_text_7));
}
else
{
}
txtDay.setText((Integer)
getItem(position));
iv.addView(txtDay,lp);
return
iv;
}
}
}
3.4
启动和运行
当你点击运行程序是的加载代码
TextView
txtDay
=
new
TextView(activity);//
日期
txtDay.setGravity(Gravity.CENTER_HORIZONTAL);
//
判断是否是当前月
if
(iMonth
==
iMonthViewCurrentMonth)
{
txtToDay.setTextColor(resources.getColor(R.color.ToDayText));
txtDay.setTextColor(resources.getColor(R.color.Text));
}
else
{
txtDay.setTextColor(resources.getColor(R.color.noMonth));
txtToDay.setTextColor(resources.getColor(R.color.noMonth));
}
int
day
=
myDate.getDate();
//
日期
txtDay.setText(String.valueOf(day));
txtDay.setId(position
+
500);
iv.setTag(myDate);
LinearLayout.LayoutParams
lp
=
new
LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
iv.addView(txtDay,lp);
LinearLayout.LayoutParams
lp1
=
new
LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
iv.addView(txtToDay,lp1);
//
日期结束
4
运行结果
4.1
系统启动
进入系统后,系统加载如图4.1。
图4.1
系统初始化
4.2
进入日历
进入日历主界面(可滑动进行翻页查看其他日期点击添加备注等功能),如图4.2
图4.2
主界面
4.4
退出应用
单击MENU键,退出应用。如图4.3。
图4.3
退出App
5
结论
日历是一款经典的小应用它既有简单易学的特性,而且界面美观;2007年11月5日,互联网巨头Google宣布依靠android系统进军手机操作系统领域后,几年来android一路高歌,拥有越来越多的用户群体,为顺应时代潮流,本次创新实践周的题目是一款能够在android手机上运行的小应用。
通过这次课程设计,我学到了很多新的知识,同时也锻炼了我的综合运用所学的知识,解决问题的能力,也提高我查阅文献资料、对程序整体的把握等其他能力与水平。在课程设计过程中,在小组成员的讨论中,不断地对源程序进行改进与完善,修改了以往扫雷程序的界面,界面更加漂亮。并且在编写的过程中,各种组件的运用,各种算法的应用,各种控件的利用我都是随着课程设计的不断深入而不断熟悉并逐步掌握的。
总而言之,在创新实践周中,我对android平台和游戏开发等领域都有了一定的了解。其中所学到的知识,将成为我今后学习工作当中的监视基础。希望以后还会有这种锻炼自己的实践机会。
参考文献
[1]
景保玉.2010中国移动应用开发现状与趋势大调查.2011年01月12日:10~23
[2]
Michael
J.Young.
轻松搞定XML.林嘉胜译.
清华大学出版社,2001年01月08日:12~58
[3](英)Herbert
Schildt
Java参考大全(J2SE
5
Edition).清华大学出版社.2010年:1~58
[4]
Mark
L.Murphy.Android开发入门教程.人民邮电出版社,2010年12月:1~20
[5]
郭宏志.Android
应用开发详解[M].北京:电子工业出版社.2010-10-2
[6]
余志龙.Google
Android
SDK
开发范例大全[M].北京:人民邮电出版社.2009-7-1
[7]
靳岩,姚尚朗.Google
Android
开发入门与实战[M].北京:人民邮电出版社.2009-7-1