版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
3.1新建一个工程新建一个Android工程的步骤如下,依次选择File->New->Project项。会出现如图3.1所示的界面:选择Android->AndroidProject然后单击Next,如图3.2所示,就进人到新建工程的对话框。如果已经使用Eclip、建立过Android工程,那么在File->New会直接可以看到一个AndroidProject选项。我们也可以由此直接进人新建工程对活框。下一页返回3.1新建一个工程进人到新建工程对活框填写工程信息,这里包括项目名称(Projectname)、应用程序名称(Applicationname)、包的名称(Packagename),Activity的名称。这里的项目、应用程序和包的名称和Java项目相同,Android的应用可以说是以Activity为单位的,这里是第一个Activity的名字,Activity名字的首字母最好要大写。这里可以按图3.3所示来填写。打开包预览器,可以看到如图3.4结构,在第一级目录中可以看到有、src,gen,Android2.3.3和res目录以及AndroidManifesl.xml文件。它们分别存放工程的源代码文件,工具自动生成文件、Android系统库文件和资源文件。上一页返回3.2HelloWorld工程结构分析3.2.1AndroidManifesl.xmlAndroidManifesl.xtnl是每一个应用都需要的文件,位于应用根目录下,描述了程序包的一个全局变量,包括暴露的组件(activities,services等)和为每个组件的实现类,了1么样的数据可以操作,以及各种能被处理的数据和启动位置信息。该文件提供了Android系统所需要的关于该应用程序的必要信息,即在该应用程序的任何代码运行之前系统所必须拥有的信息。一个典型的Android应用程序的结构如图3.5所示下一页返回3.2HelloWorld工程结构分析3.2.2参考函数库一系列的参考函数库也包含在项目的根目录下,典型的情况下,对于一个新建的系统,将可以看到一个函数库andoid.jar。这部分都是已经编泽好的class文件,在代码中包含的一些系统库就位于这个Jar文件中。可以试着打开一个Jar文件,会看到里面都是打包的class文件。3.2.3文件夹在根文件夹下面有三个子文件夹分别为res,asset和src。每个文件夹都有其特定的目的。res文件夹上一页下一页返回3.2HelloWorld工程结构分析系统所有的用到的资源都包含在这个文件夹下,在这个文件夹下有5个子文件夹drawa-ble-hdpi,drawable-ldi,drawbale-tndpi,layout和、aloes其中:Drawable目录里面主要放置应用程序的图片信息layout目录主要用来放置应用程序的布局文件,这些文件都是XML文件Values目录下主要放置字符串sIcing.xtnl,颜色colors.xml和数组array.xml的全局变量。上一页下一页返回3.2HelloWorld工程结构分析Android除了提供/res目录存放资源文件外,在/assets目录也可以存放资源文件,而且assets目录下的资源文件不会在R.java自动生成ID,所以读取/assets目录下的文件必须指定文件的路径。可以通过AssetManager类来访问这些文件。目录中主要是用于放置多媒体文件。src文件夹该文件夹包括所有的源文件。当项目被创立的时候,在src文件夹下将出现两个文件:一个是R.Java;一个是<activity>.javaoR.Java由android插件自动生成,包含指向指针。这个文件将被系统自动维护,对于开发者来说基本上没有了什么用处,但对于Android系统来说却非常有用,在这个文件中,Android对资源进行了全局索引,当drawable,layout和val-ues目录发生任何变化,R.java都会重新编泽,同步更新。上一页返回3.3HelloWorld代码分析打开src目录下的HelloWorld.java,如图3.6所示。3.3.1包的声明在代码的第1行是包的声明,这个名字是在建立工程的时候指定。在这里设定为:packagecorn.Bilhelloworld这一行的作用是指出这个档案所在的名称空间。"package"(包)是其关键字。使用名称空间的原因是程序一旦扩展到某个大小,程序中的变量名称、方法名称、类别名称难免重复,这时就可以将定义的名称区隔管理在package下,以避免相互冲突的情形发生。下一页返回3.3HelloWorld代码分析Java的package设计成与档案系统结构相对应,如这里的package设定是:“packagecom.bilhelloworld”,则这个类别就该在指定目录的“com/bilhelloworld”路径下可以找到。同时也别忘了Java程序语言每段叙述语句的结尾处,与大部分的程序语言一样需加上一个分号“;”,以表示一行程序叙述的结束。上一页下一页返回3.3HelloWorld代码分析3.3.2导人包的声明可以看到在第2行和第3行有以下的语句:importandroid.app.Activity;importandroid.os.bundle;这代表程序中预设导人了“android.app.Aclivily”跟“android.os.Bundle”两个Pack-age,在所有的Android应用程序中都会用到这两个Package."import"(导人)是用作导人Package的关键字。在Java语言中,使用到任何API前都要事先导人相对应的Package。如果使用Eclipse开发,不用担心导人错误或者多导人了一些Package,因为Eclipse为自动为我们提示需要导人的Package.上一页下一页返回3.3HelloWorld代码分析下面将介绍这两个Package的用途。Android支持的Package与标准的Java(J2SE)不尽相同。在写Android应用程序时,偶尔可能需要参考可用的API列表,以确认使用到的Package是否有内建支援。后续章节中也将讲解如何透过新增“lar”档来呼叫额外的Package.在Android中,各种包写成android.*的方式,重要包的描述如下所示:android.app:提供高层的程序模型、提供基本的运行环境。android.content:包含各种对设备上的数据进行访问和发布的类。android.database:通过内容提供者浏览和操作数据库。android.graphics:底层的图形库,包含画布、颜色过滤、点、矩形,可以将它们直接绘制到屏幕上。上一页下一页返回3.3HelloWorld代码分析android.location:定位和相关服务的类。android.media:提供一些类管理多种音频、视频的媒体接口。android.nel:提供帮助网络访问的类,超过通常的lava.net.*一接口。android.os:提供了系统服务、消息传输、IPC机制。android.open烈:提供OpenGL的工具,3D加速。android.provider:提供类访问Android的内容提供者。android.tetephony:提供与拨打电活相关的API交互。android.view:提供基础的用户界面接口框架。上一页下一页返回3.3HelloWorld代码分析android.util涉及工具性的方法,例如时间口期的操作。android.webkil默认浏览器操作接口。android.widgel:包含各种UI元素(大部分是可见的)在应用程序的屏幕中使用。上一页下一页返回3.3HelloWorld代码分析3.3.3程序的主体部分程序的主体部分是一个继承于Activity的Helloworld类,如下所示:Publicclasshelloworldextendsactivity{}这是程序的主体部分,"Helloworld”是这个类别的名称。"class”则是用作宣告类别关键字。"public”关键字是用来修饰“Hclloworld”这个类别。表示“Hclloworld”是个“公开”的类别,可以从package外部取用。"publicclassHclloworld")占面再加上“cxlcndsActivtly"叙述,则表示“Helloworld”这个类别的功能、型别等全继承自“Activilt”类别。"extends"是继承(Inherit)类别的关键字。"Activity”是来自于第3行刚导人的Package.上一页下一页返回3.3HelloWorld代码分析因此整句话的含意即:宣告一个公开的“Helloworld”类别。这个“Helloworld”类别继承了程序开头导人的Activity类别。“{}”大括号规范了一个程序区块。大括号中的程序表达的是这个程序区块的主要内容。/*Calledwhentheactivity'isfirstcreated.*/该行提供了位于其下的函数的注释。“/**/”是Java语言的多行注解符号,位于其中的文字内容不会被编泽。“/*”叙述后多出来的一个“*”号被视为内文。顺便提醒一下,Java程序语言中两个斜线“//”表示的是单行注解符号。单行注解符号“//”与多行注解符号“/**/”不同的地方是,只有与“//”符号同行的文字才不会被编泽。上一页下一页返回3.3HelloWorld代码分析PublicvoidonCreate(bundlesavedinstancestate){}"onCreaLe”是这个方法的名称。"void”则是宣告了这个方法的回传值的型别(type)."public”关键字是用来修饰此处的onCreaLe)方法。表示onCreate)是个“公开”的方法,可以由“Helloworld”类别外部取用。在onareate()方法的前面是返回值的类型,此处onareate()这个方法使用“void“型别,表示此处的onCreate()方法不需回传值。同时,这个方法传人了一个名为“savcdInstanceStatc”的“Bundle”类型参数,"bundle"类型正是来自前面所导人的Package之一。我们并不需要知道太多“Bundle”类型或“saved-InstanceState”实体的细节,只要知道"Bundle”的内容与手机平台的记忆体管理有关。上一页下一页返回3.3HelloWorld代码分析当Android应用程序启动、换到背景等待、关闭时,都会用到“savedInslanceSlale”这个实体来处理记忆体相关的事宜。当然,也可以用其他名称来代替它。由于“onCreale”这个方法永远都是传人“BundlesavedInslanceState”这个参数,写应用程序时只要正确照规定传人即可,可以不用太去在意它。"Bundle”可以保存程序上一次关闭(冻结)时的状态。可以透过覆写onfreeze()方法(与onCreate)方法的作用类似)来保存冻结前的状态。当程序启动(Activity重新初始化)时,会再次呼叫onCreaLe()方法,这样就能从savedInslan-ceSlale中得到前一次冻结的状态。也可以透过“Bundle”来将这个Aclivily的内容传到下一个Activity中。“{}”大括号规范了一个程序区块。大括号中的程序表达onCreale这个程序区块的主要内容。上一页下一页返回3.3HelloWorld代码分析super.onCreate(savedlInstanceState);"super”是关键字。代表着这个“Helloworld”类别的上层类别(Activity).per.onCreale(savedInslanceSlale);”的意思就是:执行Aclivil、类别中。nCreale)方法的内容。googleAndroid将其应用程序的界面称为视图(Vle耐,而负责控制各种动作行为的程序主体(Controller,则称为活动(Activity)。因此一个Android应用程序,必定会对应到一个以上的Activity.onCreale()方法则是每个Activity类别初始化时都会去呼叫的方法。我们想做的事,是保持原本onCreale()方法预设的动作,然后在其中加人想要的内容。上一页下一页返回3.3HelloWorld代码分析而Android产生的程序预设却重载(@Override)了“Helloworld”类别的“onCreate"方法。原本继承自“Activity”类别的“onCreale”方法,其原本内容都被重载掉了。因此想将原本的onCreale()方法内容保留,并在其中加人想要的内容的话,就要使用“super”语句。当程序运行到我们重载的“onCreale”方法时,透过“super.onCreale(savedlInstanceState);”语句,会先将原本“Activity”类别中的onCreale)方法执行一次,然后再执行重写的onCreate()方法里面其他的程序内容。上一页下一页返回3.3HelloWorld代码分析要执行原本的onCreate)方法时,仍然需要提供原本onCreate)方法所需的传人参数。因此“super.onCreale(savedlInstanceState);”语句中,将“savedlInstanceState”这个参数传人原本的onCreaLe()函数中。"savedlInstanceState”是在“publicvoidonCreate(BundlesavedlInstanceState”语句中所使用的传人参数。setContentView(R.layout.main);它的主要作用为一些展示性动作,setContentView)方法设置Activity的内容到一个特定的资源,在这个例子中,使用layout文件夹下的main.xml,layout目录下的xml文件用户作为一个Activity的界面,其中定义了用户界面的格式布局和显示控件,可以理解为网站开发中的前台的概念。main.xml文件的内容如下所示:上一页下一页返回3.3HelloWorld代码分析<?xmlversion="1.0"encoding="utf-8",><LinearLayoutxmlns:android="http%//schemas.android.com/apk/resZandroid"android:orientation="vertical"android:layout_width="fiil_parent"android:layout_height="fill_parent"><TextViewandroid:layout_width="fiil_parent"android:layout_height="wrap_content"android:text="@string/hello"/></LinearLayout>以下是对mail.xml文件内容的详细解析代码:<?xmlversion="1.0"encoding="utf—8"?>上一页下一页返回3.3HelloWorld代码分析XML(ExtensibleMarkupLanguage)是一种标记描述语言,不管是语法还是看起来的样子,都相当类似网页所使用的HTML标记语言。XML被广地运用在Java程序的设定中。在main.xml文件里,第一行是每个XML描述档固定的开头内容,用来指示这个文字档案是以XML格式描述的。代码:<LinearLayoutxmlns:android="http://schemas.android.com/apk/resZandroid"></LinearLayout>上一页下一页返回3.3HelloWorld代码分析接着看到第一个标签如下,与HTML网页标签相当类似。<Linearliayout></LinearLayout>“线性版面配置”(LinearLayout)标签,使用了两个“LinearLayout”标签,来表示一个界面元件的区块。后头的标签前加上一个”/”符号来表示结束标签。“线性版面配置”所指的是包含在“LinearLayout”标签中,所有元件的配置方式,是将一个接一个元件由上而下排队排下来的意思。代码:xmlns:android="http://schemas.android.com/apk/res/android“上一页下一页返回3.3HelloWorld代码分析xmlns开头的这串叙述,是用来宣告这个XML描述文件的名称空间(NameSpaee),后面接的URL(网址),表示这个描述档案会参照到Android名称空间提供的定义。所有Android版面配置档案的最外层标签中,都必须包含这个属性。代码:android:orientation="vertical“android:layout_width="fiil_parent"android:layout_height="fiil_parent"上一页下一页返回3.3HelloWorld代码分析这些包含在“<linearlayout>”标签中的叙述被称为“linearLayout”标签的属性。Android应用程序在layout目录中的标签,大多数的属性前都有一个“android;”前缀。同一个界面元件的属性之间,是以空白做区隔,因此事实上也能将多个属性写在同一行。当然,将属性排成多行更易于阅读。应该保持这个好习惯。上一页下一页返回3.3HelloWorld代码分析界面元件都有许多共同的属性,例如界面元件的长、宽度设定属性。Android界面元件的宽度、长度设定属性分别叫做“android;layout_width”和“android;layoul_height"。两个都设定为“fill_parent”参值。"fill_parent”如其名,所表达的的意思就是填满整个上层元件。预设LinearLayout界面元件就会充满整个屏幕空间。界面元件彼此间也会有一些不同的属性,例如LinearLayout"(线性版面配置)标签的“android;orientation"(版面走向)属性。在此填人“vertical"(垂直)属性值,表示这个界面的版面配置方式是从上而下垂直地排列其内含的界面元件。上一页下一页返回3.3HelloWorld代码分析"android.view.ViewGroup”是各种布局配置(layout)和视图(View)元件的基础类别。常见的实现有LinearLayout(线性版面配置)、FratneLayout(框架版面配置)、TableLayout(表格版面配置)、AhsoluleLayoul(绝对位置版面配置)、RelaliveLayout(相对位置版面配置)等。虽然有这么多种版面配置方式可以选用,但大多数的应用程序并不需特地去改变预设的LinearLayout的配置,只要专注在其中填人需要的界面元件即可。所以从Layout布局配置声明之后的内容才是一般应用程序开发时较常修改之处。上一页下一页返回3.3HelloWorld代码分析
<TextView/>TextView(文字检视)是第一个熟悉的界面元件。其作用是显示文字到屏幕上。读者可能注意到这个标签结尾使用了“/>”符号。“/>”符号表示这个XML叙述中没有内文,亦即此界面元件描述中不再包含其他界面元件,也表示这个界面元件就是这个屏幕中最小的组成单元了。代码:android:layout_width="fiil_parent"android:layout_height="wrap_content"android:text="HelloWorld,bmi"上一页下一页返回3.3HelloWorld代码分析上一页下一页返回下面来看看TextView界面元件中包含丁哪些属性。"android;layout_width"和"an-druid;layout_height”上面已经介绍过了,分别代表宽度跟长度。"android;layout_width"的fill_parent参数值表示宽度填满整个上层界面元件(即LinearLayout界面元件)。}.android;layoutheight”则是用上一个新的参数值wrap_content(包住内容),亦即随着文字栏位行数的不同而改变这个界面元件的高度。最后的“android}text"属性则是TextView界面元件的主要属性,亦即文字栏位中显示的文字内容。至于“@siring/hello”这段字串所代表的意义,会在后面章节说明。现在已知道:只要将“android:text"属性内容替换成想要的文字,在预览画面或在模拟器中就会显示对应的文字。3.3HelloWorld代码分析可以看到在文件中定义了Helloworld的显示大小和一个TextView。在文件中将看到如下一行:android:text="@string/hello@slring/hello定义了一个字符串型的变量hello,其值可以在/values/slring.xml中找到,如图3.7所示。上一页下一页返回3.3HelloWorld代码分析因此当seLConLenLView)方法调用main.xml时,在屏幕中将显示“HelloWorld,HelloWorldTexL"。在运行项目之前需要建立一个AVD。一个AVD设备对应一个Android版本的模拟器实例。由于firsLandroid使用的是Android2.3,因此,需要建立一个支持Android2.3的AVD设备。单击Eclipse左侧的按钮,如图3.8所示。在显示的对活框中单击【opensLheAndroidSDkandAVDManger】按钮新建一个AVD设备。并按照图3.9所示黑框中的内容输人相应的值,然后单击【CTeaLeAVD】按钮建立AVD设备。为了测试运行效果,选择RunAs->AndroidApplication,如图3.10所示,可以看到如图3.11的运行效果.上一页返回3.4HelloworldUI实现方法首先使用UI来实现Helloworld功能,第一步,对xml进行修改,在这部分主要移除Textview部分代码:<TextViewandroid:layout_width="fiil_parent"android:layout_height="wrap_content"android:text="@string/hello"/>下一页返回3.4HelloworldUI实现方法修改后的代码只剩下LinearLayout的部分,具体如下:<?xmlversion="1.0"encoding="utf—8"?><Linearliayoutxmlns:android="http://schemas.android.com/ap^ressandroid"android:orientation="vertical"android:layout_width="fiil_parent"android:layout_height="fiil_parent"></LinearLayout>第二步,因为不需要使用main.xml文件,因此在这里删除:setContentView(R.layout.main);上一页下一页返回3.4HelloworldUI实现方法第三步,从android.widget导人TextView,在使用TextView实例前我们将在程序的顶部加人:importandroid.widget.TextView;第四步,在onCrease()占加人如下代码来创建TextView实例:TextViewtv=newTextView(this);第五步,对TextView实例进行赋值操作:tv.setText("HeUoWorld,HeUoWorld!");第六步,TextView对象被创建和赋值后,系统依然无法显示内容。需要使用下面语句使内容显示在屏幕上:setContentView(tv);上一页下一页返回3.4HelloworldUI实现方法从上面的分析可以看出要显示一个内容主要可以分为:①创建对象;②赋值;③将其放置在屏幕上,程序的所有代码如下:publicclassHeUoWorldextendsActivityj/**Calledwhentheactivityisfirstcreated.*/@OverridepublicvoidonCreate(BundlesavedlnstanceState)jsuper.onCreate(savedlnstanceState);setContentView(R.layout.main);TextViewtv=newTextView(this);tv.setText("HeUoWorld,HeUoWorld!");se
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年大学大四(发酵工程)酒类发酵工艺优化基础测试题及答案
- 埃克森美孚(中国)校招笔试题及答案
- SAP(中国)秋招笔试题及答案
- 2026年工伤保险缴费管理规定题库及答案
- 2026年义务教育管理知识题库及答案
- 2026年质押合同司法解释题库及答案
- 创建老年友善医疗机构材料目录
- 2026中国广核集团校招面试题及答案
- 企业网络安全风险预防与应对策略实施方案
- 惠州生日策划活动方案(3篇)
- JYLDX架空暂态录波型远传故障指示器使用说明书
- DB13-T 5821-2023 预拌流态固化土回填技术规程
- 《 大学生军事理论教程》全套教学课件
- DL∕T 1115-2019 火力发电厂机组大修化学检查导则
- 中考数学计算题练习100道(2024年中考真题)
- JT-T-1238-2019半柔性混合料用水泥基灌浆材料
- LYT 2085-2013 森林火灾损失评估技术规范
- 【千禾味业公司内部控制现状问题及优化的案例分析7100字(论文)】
- 大学生台球俱乐部计划书
- 【某公司偿债能力现存问题及优化建议分析案例报告10000字(论文)】
- GB/T 13750-2023振动沉拔桩机安全操作规程
评论
0/150
提交评论