Android_SDK开发范例完整版_第1页
已阅读1页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

1、本文由kingwj6贡献pdf文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。GoogleAndroidSDK开发范例大全第二章:Android初体验Android操作系统顶着Google与OpenHandsetAlliance的光环,让很多程序员在Android手机还没上市之前,就开始紧追着官方文档、EarlySDK版本更新,这是IT业界罕见的现象,因为大家都抱持着“不想输在起跑点上”的心态。这也是手机发展的历史中,第一次有机会让所有的程序员站在同一个起跑点开始,无论是JavaWorld论坛、或是Google官方的DeveloperDiscussionGroup

2、都见到相当热烈的讨论。从这一章开始,将对Android的程序架构、程序进入点、编译以及执行,进行一系列的导航,而本书规划之初,并非针对Java初学者或从未接触过程序设计的朋友所设计,故在这一章简要的overview当中,则以快速掌握开发条件、开发环境为目的,若你是第一次接触Java程序语言,或从未写过面向对象程序设计,建议你先学习Java语言,打好基础后,再回过头来进入本章。接下来的内容分成五个部分:安装AndroidSDK、创建Android手机开发项目(Project)、了解Android程序的生命周期,初探可视化的开发工具,最后将应用程序部署到模拟器和Android手机上,为避免过于概念

3、性的论述及篇幅的浪费,所有操作练习皆以步骤的方法描述,只要跟着操作即可上手,在体验完本章的内容之后,你就可以开始本书范例的学习之旅了。在开始之前,你需要先准备以下作业环境以及程序:必备项目MicrosoftWindowsXP/MicrosoftWindowsVista操作系统或MacOSX10.4.8或更新的版本(硬件必须是x86的版本)或LinuxAndroidSDK1.0r2以上(本书所有范例皆以AndroidSDK1.1r1为开发环境)JavaDevelopmentKit(JDK)v6.0以上Eclipse开发IDE程序(本书所有范例皆以eclipse-jee-ganymede-SR1-

4、win32版本为编译环境)自我检查)准备就绪之后,就可以前往Android官方网站(/)下载AndroidSDK,也可以到()去下载。图2-1到Android官方网站下载SDK下载后的AndroidSDK为压缩文件,请将它解压缩到磁盘中,例如下面的文件夹:D:SDKandroid而Eclipse编译IDE环境中,需安装ADT(AndroidDevelopmentTools)plug-in,此为Android的开发工具,启动Eclipse后,请运行“Help一SoftwareUpdatesFindandInstall”,并按下“AddSite”输入ADTplug-in网址后(如下),按下“Ins

5、tall”便开始自动下载安装: HYPERLINK /android/eclipse/ /android/eclipse/图2-2安装ADTPlug-in下载后,安装向导会显示两项必须安装的程序:AndroidDevelopmentTools与AndroidEditors。图2-3选择安装Android开发工具及编辑器虽然AndroidADT可以免费下载安装,但在使用上仍然有其局限性,跟一般应用程序许可条款的签署类似。图2-4同意使用Android软件开发条款安装ADT所需的时间不长,也可以在后台运行,不会影响现有的操作系统程序。安装完毕后,需要重新启动Eclipse,才能使用AndroidA

6、DT。图2-5可以在后台运行安装ADT,并需要重新启动Eclipse至此AndroidSDK及ADT已安装完毕,所有准备工作都已经就绪,随时可以开始建立Android项目。这一节将建立本书第一个Android项目,不过,在初次建立Android项目之前,需要设置AndroidSDK的路径,让Eclipse可以找到AndroidSDK,先执行“WindowPreferences”。图2-6运行Eclipse的Preferences设置功能点击“Android”的树状列表,单击“Browse”按钮,选择刚才解压的AndroidSDK的路径,而后按下“Apply”设置让Eclipse引用的SDK文件

7、夹。图2-7设置AndroidPreferences路径AndroidSDK的引用路径设置完成之后,就可以开始建立HelloWorld这个经典范例了;运行“FileNewProject”建立新项目。图2-8建立新的项目新建项目向导需要指定一种应用程序类型,故展开“Android”后,点击“AndroidProject”,按下“Next”按钮继续。图2-9选择建立项目类型为AndroidProject新建Android项目需输入项目名称(Projectname)、Packagename、Activityname以及Applicationname,最后按下“Finish”按钮,项目随即建立完成。图

8、2-10输入项目名称及Packagename建立新项目到目前为止,新建Android项目已经完成,而且这个新建立的程序也已经可以运行,运行的方法是在“PackageExplorer”窗口里,点开刚建立好的“HelloWorld”项目文件夹,并在项目名称上单击鼠标右键,在功能菜单上运行“RunAsAndroidApplication”功能。图2-11运行“RunAs一AndroidApplication”功能假若此时尚未将手机与计算机联机,那么Eclpise将打开默认的Android模拟器(Emulator),运行画面就如同真的手机开机一样,随着计算机硬件环境的不同,运行模拟器也会有不同的性能表

9、现,开机之后,随即打开刚建立好的HelloWorld程序。图2-12没写一行程序的HelloWorld要退出被启动的“HelloWorld”程序,可以按下手机模拟器上的退格键(Backspace)。图2-13按下退格键离开程序,回到手机的桌面虽然半行代码都没有写,但向导却帮忙写好了程序进入点、布局配置、字符串常数、应用程序访问权限等,除了可作为程序模板之外,也是Android手机程序的最佳学习范例。让我们回过头来看看刚才Android项目建立向导帮忙做了哪些工作,以此来了解Android应用程序的生命周期及其文件组成方式;首先,展开“PackageExplorer”窗口里的“HelloWorl

10、d”项目名称,可以看见如下数据结构的文件:+HelloWorld+-src+-+-HelloWorld.java+-R.java+-AndroidLibrary+-android.jar-D:SDKandroid+-assets+-res+-drawable+-icon.png+-layout+-main.xml+-values+-strings.xml+-AndroidManifest.xml在展开的文件夹层中,“src”、“AndroidLibrary”、“assets”、“res”与“AndroidManifest.xml”同属一层,放置在“src”里的为主程序、程序类(class);放

11、置在“res”里的为资源文件(ResourceFiles),如程序ICON图标、布局文件(layout)与常数(values)。以此HelloWorld程序为例,主程序为“HelloWorld.java”,其内容与一般Java程序格式相类似:;importandroid.app.Activity;importandroid.os.Bundle;publicclassHelloWorldextendsActivity/*Calledwhentheactivityisfirstcreated.*/OverridepublicvoidonCreate(BundlesavedInstanceState

12、)super.onCreate(savedInstanceState);setContentView(R.layout.main);主程序里可看见HelloWorld类继承自Activity类,在类中重写了onCreate()方法,在方法内以setContentView()来设置这个Acvitity要显示的布局(R.layout.main),使用布局配置“layoutmain.xml”,布局文件是以XML格式编写的,内容如下:?xmlversion=1.0encoding=utf-8?布局配置中设置了一个TextViewTAG,用以配置文本标签Widget,其内部设置的android:text

13、属性,则是要显示的文字内容,引用“string”里的hello字符串常数。查看“values/strings.xml”字符串常数设置如下:?xmlversion=1.0encoding二utf-8?resourcesHelloWorld,HelloWorldHelloWorld/resources)其中“hello”字符串变量的内容为“HelloWorld,HelloWorld”,这即是刚才看见的HelloWorld程序显示的文字内容了。Android应用程序有以下三种类型:lll前端Activity(ForegroundActivities)。后台服务(BackgroundServices)

14、。间隔执行Activity(IntermittentActivities)。前端Activity就如同这个HelloWorld一样,运行在手机前端程序中;后台服务可能是看不见的系统服务(SystemService)、系统Broadcast(广播信息)与Receiver(广播信息)接收器);间隔执行Activity则类似如进程(Threading)、NotificationManager等等。每一个项目都有一个“AndroidManifest.xml”设置文件,里头包含这个Android应用程序具有哪些Activity、Service或者Receiver,先来看看HelloWorld制作好的“A

15、ndroidManifest.xml”设置文件的内容描述:?xmlversion二1.0encoding二utf-8?manifestxmlns:android= HYPERLINK /apk/res/android /apk/res/androidpackage=.twandroid:versionCode=1android:versionName=1.0.0categoryandroid:name=ent.category.LAUNCHER/manifest在manifest文件中有一个名为HelloWorld的Activity,设置其intent-filter的categoryandro

16、id:name为ent.category.LAUNCHER,写在intent-filter里是扌旨定此Activity为默认运行的主要Activity,除了在manifest文件中手动设置之外,也可在Eclipse右击项目名称,运行“RunAs一RunConfigurations”,设置LaunchAction:图2-14设置项目要执行的Action方式或ActivityActivity类的应用程序有其默认运行的方式,为了确保应用程序运行的优先级,理解Activity在手机运行时的生命周期,及其可视性(Visible)周期。图2-15Activity自onStop之后,程序即可被关闭以Hell

17、oWorld程序里继承自Activitry类开始,一旦程序被执行,即会照以上流程顺序进行,若需要在Activity程序里编写程序,默认常见的进入点为重写onCreate(Activity)或onStart(Service),重写的方式可通过Eclipse来选择,方法为将鼠标光标停在继承自Activity的空白处,单击鼠标右键展开菜单,点开执行“SourceOverride/ImplementMethods”功能。图2-16执行“Source一Override/ImplementMethods”功能在重写于实现方法的对话框中,点开“Activity”树状列表,在其中找到了onCreate(Bun

18、dle)方法,勾选前方的选择项(CheckBox),再按下“0K”按钮即可。图2-17选择要重写的方法,向导会自动在主程序中描述重写内容最后,比较值得一提的是onResume()与onPause(),这两个方法为Activity在onCreate之后运行过程中的生命周期,当程序失去前端焦点、或者被关闭,就会触发Activity的onPause()状态;当应用程序被再次唤醒,则会回到onResume()状态,故在编写与User互动的程序过程中,需注意User暂时离开Activity(或前往不同的Activity、不同的Service)前,需要处理的工作都会摆在onPause()当中执行。以一个通

19、过网络FTP下载mp3的Activity为例,暂停下载工作可以写在onPause里,需要接续前一次的下载等处理,则由onResume负责。Android手机有着华丽的机身、流畅的执行速度,唯一欠缺的就是“具有视觉美感的UI设计员”,但自AndroidSDKrc20a一路发展到1.0_r2,OpenHandsetAlliance提供的ADT(AndroidDevelopmentTools),终于有了预览界面的功能,只要点开项目的“reslayout”双击main.xml运行“AndroidLayoutEditor”或在其上单击鼠标右键展开菜单单,执行“OpenWithAndroidLayoutE

20、ditor”。图2-18单击XML布局配置文件,选择以AndroidLayoutEditor编辑AndroidEditor的功能虽然阳春,但至少还算齐备,具有文字模式与UI配置模式可供切换,如下图的“Layout”与“main.xml”页签切换所示。图2-19AndroidLayoutEditor具有文字模式与UI配置模式可供切换编辑目前的ADT版本,虽然提供了预览接口功能,但没有提供类似MicrosoftVisualStudio的拖拉界面组件开发工具,所以布局的配置虽然直观,但还是不够自然,所幸,在Google还未完整推出GUI的拖拉工具之前,已有网友以Java写出了好用的可视化GUI布局拖

21、拉工具程序:DroidDraw。DroidDraw目前是一个公开的GoogleCode,除了可以在线免费下载( HYPERLINK http:/code.google http:/ HYPERLINK /apk/res/android /apk/res/androidandroid:layout_width=fill_parentandroid:layout_height=wrap_contentandroid:autoLink=allandroid:text=请访问戴维的博客: HYPERLINK http:/shop.teac.idv.tw/MyBlog/ http:/shop.teac.

22、idv.tw/MyBlog/范例说明在之前的范例运行结果,窗口的底色一律是“深黑色”,这是SDK默认的颜色,要更改Activity里的窗口底色有许多方法,最简单的方法就是将颜色色码事先定义在drawable当中,当程序onCreate创建的同时,加载预先定义的画面颜色。此范例程序的设计方式是在drawable里指定Layout的背景色(BackGround)为白色,但这里的“白色”(颜色色码为#FFFFFFFF)预先定义在drawable当中,当程序运行时,背景就会变为白色。这是指定ActivityLayout背景颜色最简单的方法,在范例最末,则将示范如何创建色彩板(colortable),让

23、Android手机程序可以像使用“常数”般直接取用,并反应在应用程序的运行阶段。运行结果图3-2使用drawable设置颜色常数,应用于程序运行时的结果范例程序src/irdc.ex03_02/EX03_02.java程序继承自Activity类,并在重写onCreate创建之初,直接显示R.layout.mainmain.xml)(这个页面安排的布局配置。packageirdc.ex03_02;importandroid.app.Activity;importandroid.os.Bundle;publicclassEX03_02extendsActivity/*Calledwhenthea

24、ctivityisfirstcreated.*/OverridepublicvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.main);res/layout/main.xml在页面布局上,使用了2个TextView对象,以及2个EditText对象,关键在于android:background=drawable/white让程序背景变成了白色,而android:textColor=drawable/darkgray将TextView里的文字颜色(te

25、xtColor)设为灰色,当中“drawable/white”及“drawable/darkgray”的写法则是参考事先于drawable里定义好的颜色常数,将在res/values/color.xml里看见颜色的定义描述。扩展学习事先将定义好的颜色代码(colorcode)以drawable的名称(name)存放于resources当中,这是开发Android程序的好习惯,正如同字符串常数一样,颜色也是可以事先定义好的。在本范例中学会了使用drawable的resource的定义方法:color_value定义好的drawablename常数,必须存放于res/values下面,作为资源取用

26、,但定义好的背景颜色并非只能当作是“默认”颜色声明使用,在程序的事件里,是可以通过程序来更改的,如以下程序所示:Resourcesresources=getBaseContext().getResources();DrawableHippoDrawable=resources.getDrawable(R.drawable.white);TextViewtv=(TextView)findViewByID(R.id.text);tv.setBackground(HippoDrawable);范例说明上一个范例通过Drawable来定义颜色常数,但实际设计中最常用的方法,则是使用程序控制TextVi

27、ew或其它对象的背景色(setBackgroundDrawable方法)如判断对象被点击时,的背景色亮起、当失去焦点时,又恢复成原来的背景色等等。以下的范例,将扩展前一个范例的实现,预先在Layout当中设计好两个TextView,并在onCreate同时,通过两种程序描述方法,实时更改原来Layout里TextView的背景色以及文字颜色,最后学会使用Android默认的颜色常数(graphics.Color)来更改文字的前景色。运行结果图3-3通过setBackgroundDrawable方法更改TextView的背景色以及graphics.Color更改前景色范例程序src/irdc.e

28、x03_03/EX03_03.java程序里新建两个类成员变量:mTextViewOl与mTextViewO2,这两个变量在onCreate之初,以findViewByld方法使之初始化为layout(main.xml)里的TextView对象。在当中使用了Resource类以及Drawable类,分别创建了resources对象以及HippoDrawable对象,并将前一个范例中所创建的R.drawable.white以getDrawable方法加载,最后则调用了setBackgroundDrawable来更改mTextView01的文字底纹。更改TextView里的文字,则使用了setTe

29、xt方法。在mTextView02当中,使用了graphics.Color里的颜色常数,接着,再利用setTextColor更改文字的前景色。packageirdc.ex03_03;importandroid.app.Activity;importandroid.content.res.Resources;importandroid.graphics.Color;importandroid.graphics.drawable.Drawable;importandroid.os.Bundle;importandroid.widget.TextView;publicclassEX03_03exte

30、ndsActivityprivateTextViewmTextView01;privateTextViewmTextView02;/*Calledwhentheactivityisfirstcreated.*/OverridepublicvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.main);mTextView01=(TextView)findViewById(R.id.myTextView01);mTextView01.setText(我是应用

31、Drawable背景色的戴维文本。);Resourcesresources=getBaseContext().getResources();DrawableHippoDrawable=resources.getDrawable(R.drawable.white);mTextView01.setBackgroundDrawable(HippoDrawable);mTextView02=(TextView)findViewById(R.id.myTextView02);/*下使用Color.MAGENTA指定文本的颜色为紫红色*/mTextView02.setTextColor(Color.MAG

32、ENTA);扩展学习Resourcesresources=getBaseContext().getResources();DrawableHippoDrawable=resources.getDrawable(R.drawable.white);上述这2行代码,在前一版本中的写法是这样的:Resources.resources=getDrawable(R.drawable.solid_red);DrawableHippoDrawable=resources.getDrawable(R.drawable.white);但是在1.0之后的版本,Resources不再支持直接使用.getDrawab

33、le方法直接取用drawable,而必须先取得基类的Context才行。此外,在程序里使用了Color.MAGENTA让TextView里的文字变成了粉红色,事实上,在Android里还有以下12种常见的颜色:Color.BLACKColor.BLUEColor.CYANColor.DKGRAYColor.GRAYColor.GREENColor.LTGRAYColor.MAGENTAColor.REDColor.TRANSPARENTColor.WHITEColor.YELLOW这些颜色常数是定义在android.graphics.Color里的:类型intintintintintintin

34、tintintintintint常数BLACKBLUECYANDKGRAYGRAYGREENLTGRAYMAGENTAREDTRANSPARENTWHITEYELLOW值-16777216-16776961-16711681-12303292-7829368-16711936-3355444-65281-655360-1-256色码0 xff0000000 xff0000ff0 xff00ffff0 xff4444440 xff8888880 xff00ff000 xffcccccc0 xffff00ff0 xffff00000 x000000000 xffffffff0 xffffff00范

35、例说明从一开始自Layout里通过Resource初始化TextView的文字,到程序中动态更改TextView文字,但要如何在代码里取得Resource的字符串呢?在Android里,确实是有些方法可以直接以R.string.*直接转换ID为String,不过,这样的数据类型转换是非常规甚至是不妥的,正确的方法是利用Context.getString方法来取得存放在global里的ResourceID。以下这个范例将示范如何在程序运行时(runtime),通过CharSequence依据ResourceID取出字符串,并正确更改TextView的文字。运行结果图3-4通过java.lang.

36、CharSequence这个Interface来取得存放在global里的ResourceID范例程序src/irdc.ex03_04/EX03_04.java主程序的差异主要是在更改mTextViewO2的文字时(setText方法)合并了str_3与str_2,这两个不同对象,由于setText方法同时支持CharSequence与String类型的参数,故在此示范不同数据类型的字符串进行同步输出。packageirdc.ex03_04;importandroid.app.Activity;importandroid.os.Bundle;importandroid.widget.TextV

37、iew;publicclassEX03_04extendsActivityprivateTextViewmTextView02;/*Calledwhentheactivityisfirstcreated.*/OverridepublicvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.main);mTextView02=(TextView)findViewById(R.id.myTextView02);CharSequencestr_2=getStri

38、ng(R.string.str_2);Stringstr_3=我是程序里调用Resource的;mTextView02.setText(str_3+str_2);res/layout/main.xml为了作为对比,在main.xml里创建了两个TextView,并采LinearLayout的方式配置,一上一下,在运行结果中id为myTextView01的TextView并没有任何文字的更改,维持一开始的str_1参考字符串常数里的文字)但在程序运行后,为myTextView02的TextView(,id则作了文字的实时更改。扩展学习虽然在values/strings.xml里定义了默认的字符串

39、常数,需留意若遭遇如“?”、“”、“”等符号时,必须使用转义字符(),如下:?范例说明在开发手机应用程序时,除了底层对API的掌握度之外,最重要的仍是对屏幕分辨率的概念,因各家手机厂商所采用的屏幕尺寸不同,userUI接口呈现及布局自然也各异。尽管Android可设置为随着窗口大小调整缩放比例,但即便如此,手机程序设计人员还是必须知道手机屏幕的边界,以避免缩放造成的布局(Layout)变形问题。这个范例非常的简短,只需几行程序即可取得手机的分辨率,当中的关键则是DisplayMetrics类的应用。运行结果图3-5取得Android手机的实际屏幕分辨率范例程序src/irdc.ex03_05/

40、EX03_05.java在android.util底下的DisplayMetrics对象,记录了一些常用的信息,包含了显示信息、大小、维度、字体等等;在使用时,请记得引用android.util.DisplayMetries。值得一提的是DisplayMetrics对象里的widthPixels及heightPixels字段为整数类型,在以下的程序当中,并没有对其作字符串类型的转换,因为字符串连接运算符的缘故,所以输出strOpt为字符串。paekageirde.ex03_05;importandroid.app.Aetivity;importandroid.os.Bundle;importa

41、ndroid.util.DisplayMetries;importandroid.widget.TextView;publieelassEX03_05extendsAetivityprivateTextViewmTextView01;/*Calledwhentheaetivityisfirstereated.*/OverridepublievoidonCreate(BundlesavedInstaneeState)super.onCreate(savedInstaneeState);setContentView(R.layout.main);/*必须引用android.util.Display

42、Metries*/DisplayMetriesdm=newDisplayMetries();getWindowManager().getDefaultDisplay().getMetries(dm);StringstrOpt=手机屏幕分辨率为:+dm.widthPixels+X+dm.heightPixels;mTextView01=(TextView)findViewById(R.id.myTextView01);mTextView01.setText(strOpt);扩展学习程序一开始所创建的DisplayMetrics对象(程序中的dm),不需要传递任何参数(构造时),但在调用getWi

43、ndowManager()之后,会取得现有的Activity的Handler,此时,调用getDefaultDisplay方法将取得的宽高维度存放于DisplayMetrics对象dm中,而取得的宽高维度是以像素为单位(Pixel),“像素”所指的是“绝对像素”而非“相对像素”。范例说明老是要一个个指定文字的大小、颜色也不是办法,有没有类似CSS样式的方法可用来指定颜色、大小呢?事实上是有的,在Android程序开发过程中,也可以通过样式(Style)的方式,初始化TextView的文本颜色、大小;当然这个范例只是抛砖引玉,在Layout当中的任何对象(以XML定义)都可以用样式化的方式来更改

44、其外观。在以下的范例中,将创建两个TextView作为对比,使其呈现两种不同的样式差异作为练习,而Style的写法与先前介绍到的颜色常数(color.xml)相同,同样是定义在res/values下面,但其XML定义的方式不同来看看以下这个范例练习。运行结果图3-6利用Style来初始化TextView范例程序src/irdc.ex03_06/EX03_06.java主程序看起来非常干净,只有加载R.layout.main定义布局内容而已,但由于定义在main.xml里的语句不同,自然也有不同的样貌呈现。packageirdc.ex03_06;importandroid.app.Activit

45、y;importandroid.os.Bundle;publicclassEX03_06extendsActivity/*Calledwhentheactivityisfirstcreated.*/OverridepublicvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.main);res/layout/main.xml诚如先前所述,初始化TextView时,指定Style属性,使其应用style.xml里事先定义好的样式。android:layo

46、ut_height=fill_parentres/values/style.xml在此的style.xml就是这个范例的关键之处了,当中定义了两个样式名称,分别为DavidStyleTextl与DavidStyleText2;留意于/resources扩展学习style与color的XML语法相类似,皆需要先声明xml的版本以及encoding为UTF-8,但其内的resources则需要以stylename作为样式名称,在最内层才是以item定义样式的范围,其语法如下:范例说明按钮在许多Windows窗口应用程序中,是最常见到的控件(Controls),此控件也常在网页设计里出现,诸如网页注

47、册窗体、应用程序里的“确定”等等。而按钮所触发的事件处理,我们称为EventHandler,只不过在Android当中,按钮事件是由系统的Button.OnClickListener所控制,熟悉Java程序设计的读者对OnXxxListener应该不陌生。以下的范例将示范如何在Activity里布局一个按钮(Button),并设计这个按钮的事件处理函数,当点击按钮的同时,更改TextView里的文字。运行结果图3-7Android手机的实际画面运行结果范例程序src/irdc.ex03_07/Ex03_07.java一开始,必须先在Layout当中布局一个Button及一个TextView对象

48、,找不到这两个组件的话,系统会无法运行下去,在开发阶段会造成编译错误。其次在主程序中,请留意onCreate里创建的Button.OnClickListener事件,这也是触发按钮时会运行的程序段落;但由于Eclipse无法自动加载默认的传递参数(newButton.OnClickListener(),所以,在编写程序描述时,必须自行键入新创建的按钮所需的OnClickListener()事件,如下所示:packageirdc.ex03_07;importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.View;i

49、mportandroid.widget.Button;importandroid.widget.TextView;publicclassEX03_07extendsActivityprivateButtonmButton1;privateTextViewmTextView1;/*Calledwhentheactivityisfirstcreated.*/OverridepublicvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.main);mButt

50、on1=(Button)findViewById(R.id.myButton1);mTextView1=(TextView)findViewById(R.id.myTextView1);mButton1.setOnClickListener(newButton.OnClickListener()OverridepublicvoidonClick(Viewv)/TODOAuto-generatedmethodstubmTextView1.setText(Hi,Everyone!););扩展学习本范例中只有一个按钮,但在Activity里,其实可以布局数个按钮,只需要在Layout里多配置一个按钮

51、对象,以下的程序将创建两个按钮事件作为示范:packageirdc.ex03_07;importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.Button;importandroid.widget.TextView;publicclassEX03_07extendsActivityprivateButtonmButton1;privateButtonmButton2;privateTextViewmTextView1;/*Calledwhentheactivit

52、yisfirstcreated.*/OverridepublicvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.main);mButton1=(Button)findViewById(R.id.myButton1);mButton2=(Button)findViewById(R.id.myButton2);mTextView1=(TextView)findViewById(R.id.myTextView1);mButton1.setOnClickLi

53、stener(newButton.OnClickListener()OverridepublicvoidonClick(Viewv)/TODOAuto-generatedmethodstubmTextView1.setText(Hi,Everyone!););mButton2.setOnClickListener(newButton.OnClickListener()OverridepublicvoidonClick(Viewv)/TODOAuto-generatedmethodstubmTextView1.setText(Hi,David!););最后来谈谈按钮事件里被重写的onClick(

54、Viewv)函数,此函数唯一的参数是View类型的变量v,这个变量所指的是来自父层(parent)的ContentView,亦即通过“v.*”可以更改其父层的View状态或属性。范例说明在网页的世界里,想要在两个网页间做转换,只要利用超链接(HyperLink)就可以实现,但在手机的世界里,要如何实现手机页面之间的转换呢?最简单的方式就是改变Activity的Layout!在这个范例里头,将布局两个Layout,分别为Layoutl(main.xml)与Layout2(mylayout.xml),默认载入的Layout为main.xml,且在Layoutl当中创建一个按钮,当点击按钮时,显示第

55、二个Layout(mylayout.xml);同样地,在Layout2里也设计一个按钮,当点击第二个Layout的按钮之后,则显示回原来的Layout1,现在就来示范如何在两个页面之间互相切换。运行结果图3-8手机页面Layout间的切换范例程序src/irdc.ex03_08/EX03_08.java主程序中,预加载的Layout是main.xml,屏幕上显示的是黑色背景的“ThisisLayoutl!”,在第一个Layout上的按钮被点击的同时,改变Activity的Layout为mylayout.xml,屏幕上显示变为白色背景的“ThisisLayout2!”,并利用Button点击时,

56、调用方法的不同做两个Layout间的切换。packageirdc.ex03_08;/*import相关class*/importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.Button;publicclassEX03_08extendsActivity/*Calledwhentheactivityisfirstcreated.*/OverridepublicvoidonCreate(BundlesavedInstanceState)super.onCreate

57、(savedInstanceState);/*载入main.xmlLayout*/setContentView(R.layout.main);/*以findViewById()取得Button对象,并添加onClickListener*/Buttonb1=(Button)findViewById(R.id.buttonl);bl.setOnClickListener(newButton.OnClickListener()publicvoidonClick(Viewv)jumpToLayout2(););/*methodjumpToLayout2:将layout由main.xml切换成mylay

58、out.xml*/publicvoidjumpToLayout2()/*将layout改成mylayout.xml*/setContentView(R.layout.mylayout);/*以findViewById()取得Button对象,并添加onClickListener*/Buttonb2=(Button)findViewById(R.id.button2);b2.setOnClickListener(newButton.OnClickListener()publicvoidonClick(Viewv)jumpToLayoutl(););/*methodjumpToLayout1:将l

59、ayout由mylayout.xml切换成main.xml*/publicvoidjumpToLayoutl()/*将layout改成main.xml*/setContentView(R.layout.main);/*以findViewById()取得Button对象,并添加onClickListener*/Buttonb1=(Button)findViewById(R.id.button1);b1.setOnClickListener(newButton.OnClickListener()publicvoidonClick(Viewv)jumpToLayout2(););res/layout

60、/main.xml为了凸显Layout间切换的效果,特别改变两个Layout的背景色及输出文字。main.xml在中定义其背景色为黑色,输出文字为“ThisisLayout1!”res/layout/mylayout.xml在mylayout.xml中定义其背景色为白色,输出文字为“ThisisLayout2!”扩展学习运用改变ActivityLayout这个技巧,就可做出手机页面转换的效果,当然亦可搭配之前介绍过的Style与Theme的设置,进行更加灵活的布局配置运用,例如,让用户自行决定要使用的系统样式、背景及文字颜色等,接着直接应用来改变布局。再者,利用setContentView来置

温馨提示

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

评论

0/150

提交评论