下载

3下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 Android 开发从入门到精通 IBM

Android 开发从入门到精通 IBM.pdf

Android 开发从入门到精通 IBM

sunsj
2010-12-14 0人阅读 举报 0 0 0 暂无简介

简介:本文档为《Android 开发从入门到精通 IBMpdf》,可适用于IT/计算机领域

Android开发从入门到精通Android开发从入门到精通Android是一种基于Linux®V内核的综合操作环境。最初Android的部署目标是移动电话领域包括智能电话和更廉价的翻盖手机。但是Android全面的计算服务和丰富的功能支持完全有能力扩展到移动电话市场以外。Android也可以用于其他的平台和应用程序。本专题提供的教程、技术文章首先带大家了解Android开发进而深入到Android开发的各个方面。Android开发入门Android开发简介Android是Google提供的移动、无线、计算机和通信平台。通过使用AndroidEclipse插件可以在强大的Eclipse环境中构建Android应用程序。本教程介绍如何用Eclipse插件AndroidDevelopmentTools进行Android应用程序开发包括对Android平台和AndroidDevelopmentTools的介绍并开发两个示例应用程序。用Eclipse开发Android应用程序Android是一种基于Linux®V内核的综合操作环境。最初Android的部署目标是移动电话领域包括智能电话和更廉价的翻盖手机。但是Android全面的计算服务和丰富的功能支持完全有能力扩展到移动电话市场以外。Android也可以用于其他的平台和应用程序。在本文中阅读对Android平台的简介并学习如何编写基本的Android应用程序。深入Android开发手机上的ScalaAndroid操作系统为移动开发提供强大、开放的平台。它利用了Java编程语言和Eclipse工具平台的威力。现在还可以将Scala编程语言加入到其中。在本文中您将看到如何使用Scala作为Android上的主要开发语言从而可以使用一种更具表达力、更加类型安全的编程语言编写移动应用程序。构建Android手机RSS阅读器本教程将展示如何使用AndroidDeveloperTools读取、解析和显示XML数据。构建一个运行在Android平台上的RSS阅读器并集成不同的RSS或其他XML数据源以构建自己的mashup应用。Android助力云计算开源的Android操作系统已经席卷全球它允许您在任何位置运行复杂的云计算应用程序。它设计用于在电池供电设备(如TMobileG智能电话)上高效工作Android本质上就是LinuxAndroid编程模型有多个层允许创建为云计算量身定做的安全应用程序。使用Android达到新的高度并体验前所未有的移动计算吧。使用Android实现联网Android是面向应用程序开发的丰富平台它提供一套出色的用户界面元素和数据管理功能。它还为开发连接到真实世界的应用程序提供了出色的网络选项。您希望连接到哪里?也许您希望告诉全世界您正在使用Twitter。或者希望收到有关在本地洗衣店或熟食店的排号。如果希望将Android连接到您所生活的世界那么请阅读本文。深入探讨Android传感器Android是一个面向应用程序开发的富平台它拥有许多具有吸引力的用户界面元素和数据管理功能。Android还提供了一组丰富的接口选项。在本文中学习如何配合使用Android的各种传感器选项监控您的环境。样例代码展示了如何在Android电话中录制音频。想构建自己的婴儿监视器吗?想用声音来接听电话或者打开房门吗?请学习如何利用配备有Android的设备的硬件功能。回页首Android开发简介Android开发简介开源的设备平台Android是一种基于Linux®V内核的综合操作环境。最初Android的部署目标是移动电话领域包括智能电话和更廉价的翻盖手机。但是Android全面的计算服务和丰富的功能支持完全有能力扩展到移动电话市场以外。Android也可以用于其他的平台和应用程序。在本文中阅读对Android平台的简介并学习如何编写基本的Android应用程序。简介黑莓和iPhone都提供了受欢迎的、高容量的移动平台但是却分别针对两个不同的消费群体。黑莓是企业业务用户的不二选择。但是作为一种消费设备它在易用性和“新奇特性”方面难以和iPhone抗衡。Android则是一个年轻的、有待开发的平台它有潜力同时涵盖移动电话的两个不同消费群体甚至可能缩小工作和娱乐之间的差别如今很多基于网络或有网络支持的设备都运行某种Linux内核。这是一种可靠的平台:可经济有效地进行部署和提供支持并且可直接作为面向部署的良好的设计方法。这些设备的UI通常是基于HTML的可通过PC或Mac浏览器查看。但并不是每个设备都需要通过一个常规的计算设备来控制。想象一下传统的家用电器例如电炉、微波炉或面包机。如果您的家用电器由Android控制并且有一个彩色触摸屏会怎么样?如果电炉上有一个AndroidUI那么操控者甚至可以烹饪点什么东西。在本文中了解Android平台以及如何将它用于移动和非移动应用程序。安装AndroidSDK并构建一个简单的应用程序。下载本文中的示例应用程序的源代码。Android简史Android平台是OpenHandsetAlliance的成果OpenHandsetAlliance组织由一群共同致力于构建更好的移动电话的公司组成。这个组织由Google领导包括移动运营商、手持设备制造商、零部件制造商、软件解决方案和平台提供商以及市场营销公司。从软件开发的观点看Android正处在开源领域的中心位置。市场上第一款支持Android的手机是由HTC制造并由TMobile供应的G。这款设备从设想到推出花了大约一年的时间惟一可用的软件开发工具是一些实行增量改进的SDK发行版。随着G发行日的临近Android团队发布了SDKV用于这个新平台的应用程序也浮出水面。为了鼓励创新Google举办了两届“AndroidDeveloperChallenges”为优胜的参赛作品提供数百万美金的奖励。G问世几个月之后随后就发布了AndroidMarket它使用户可以浏览应用程序并且可以将应用程序直接下载到他们的手机上。经过大约个月一个新的移动平台进入公众领域。Android平台Android有丰富的功能因此很容易与桌面操作系统混淆。Android是一个分层的环境构建在Linux内核的基础上它包括丰富的功能。UI子系统包括:窗口视图用于显示一些常见组件(例如编辑框、列表和下拉列表)的小部件Android包括一个构建在WebKit基础上的可嵌入浏览器iPhone的MobileSafari浏览器同样也是以WebKit为基础。回页首回页首Android开发简介Android提供多种连接选项包括WiFi、蓝牙和通过蜂窝(cellular)连接的无线数据传输(例如GPRS、EDGE和G)。Android应用程序中一项流行的技术是链接到Google地图以便在应用程序中显示地址。Android软件栈还提供对基于位置的服务(例如GPS)和加速计的支持不过并不是所有的Android设备都配备了必需的硬件。另外还有摄像支持。过去移动应用程序努力向桌面应用程序看齐的两个领域分别是图形媒体和数据存储方法。Android通过提供对D和D图形的内置支持包括OpenGL库解决了图形方面的挑战。由于Android平台包括流行的开源SQLite数据库因此缓解了数据存储的负担。图显示一个简化的Android软件层次结构。图Android软件层次结构应用程序架构如前所述Android运行在Linux内核上。Android应用程序是用Java编程语言编写的它们在一个虚拟机(VM)中运行。需要注意的是这个VM并非您想象中的JVM而是DalvikVirtualMachine这是一种开源技术。每个Android应用程序都在DalvikVM的一个实例中运行这个实例驻留在一个由Linux内核管理的进程中如下图所示。回页首Android开发简介Android应用程序由一个或多个组件组成:活动具有可视UI的应用程序是用活动实现的。当用户从主屏幕或应用程序启动器选择一个应用程序时就会开始一个动作。服务服务应该用于任何需要持续较长时间的应用程序例如网络监视器或更新检查应用程序。内容提供程序可以将内容提供程序看作数据库服务器。内容提供程序的任务是管理对持久数据的访问例如SQLite数据库。如果应用程序非常简单那么可能不需要创建内容提供程序。如果要构建一个较大的应用程序或者构建需要为多个活动或应用程序提供数据的应用程序那么可以使用内容提供程序实现数据访问。广播接收器Android应用程序可用于处理一个数据元素或者对一个事件(例如接收文本消息)做出响应。Android应用程序是连同一个AndroidManifestxml文件一起部署到设备的。AndroidManifestxml包含必要的配置信息以便将它适当地安装到设备。它包括必需的类名和应用程序能够处理的事件类型以及运行应用程序所需的许可。例如如果应用程序需要访问网络例如为了下载一个文件那么manifest文件中必须显式地列出该许可。很多应用程序可能启用了这个特定的许可。这种声明式安全性有助于减少恶意应用程序损害设备的可能性。下一节讨论构建Android应用程序所需的开发环境。所需的工具开始开发Android应用程序的最简捷的方式是下载AndroidSDK和EclipseIDE(参见参考资料)。Android开发可以在Microsoft®Windows®、MacOSX或Linux上进行。本文假设您使用的是EclipseIDE和用于Eclipse的AndroidDeveloperTools插件。Android应用程序是用Java语言编写的但是是在DalvikVM(非Java虚拟机)中编译和执行的。在Eclipse中用Java语言编程非常简单Eclipse提供一个丰富的Java环境包括上下文敏感帮助和代码提示。Java代码通过编译后AndroidDeveloperTools可确保适当地将它打包包括AndroidManifestxml文件。虽然没有Eclipse和AndroidDeveloperTools插件也可以开发Android应用程序但是那样就需要熟悉AndroidSDK。AndroidSDK是作为一个ZIP文件发布的可以将该文件解压到硬盘上的一个目录中。由于有多个SDK更新建议有意识地组织开发环境以便在不同的SDK安装之间轻松地切换。SDK包括:androidjarJava归档文件其中包含构建应用程序所需的所有的AndroidSDK类。documentionhtml和docs目录本地和网上提供的SDK文档。这些文档的主要形式为JavaDocs以便于在SDK中导航大量的包。文档还包括一个高级开发指南和Android社区的链接。Samples目录samples子目录包含各种应用程序的源代码包括ApiDemo该应用程序演示了很多API。这个示例应用程序可以作为Android应用程序开发的良好起点。Tools目录包含所有用于构建Android应用程序的命令行工具。最常用、最有用的工具是adb实用程序(AndroidDebugBridge)。usbdriver该目录包含将开发环境连接到支持Android的设备(例如G或AndroidDev解锁开发手机)所需的驱动程序。只有Windows平台的开发人员才需要这些文件。Android应用程序可以在实际的设备上运行也可以在AndroidSDK附带的AndroidEmulator上运行。图显示AndroidEmulator的主屏幕。图AndroidEmulator回页首Android开发简介AndroidDebugBridgeadb实用程序支持一些可选命令行参数以提供强大的特性例如复制文件到设备或从设备复制文件。可以使用shell命令行参数连接到手机本身并发送基本的shell命令。图显示在通过USB线连接到Windows笔记本电脑的一个实际设备上运行的adbshell命令。图使用adbshell命令Android开发简介在这个shell环境中可以:显示网络配置网络配置可显示多个网络连接。注意这多个网络连接:olo是本地或loopback连接。otiwlan是WiFi连接该连接由本地DHCP服务器提供一个地址。显示PATH环境变量的内容。执行su命令以成为超级用户。将目录改为dataapp其中存放用户应用程序。列出包含某个应用程序的目录。Android应用程序文件实际上是归档文件可通过WinZip之类的软件查看。扩展名为apk。发出ping命令查看Googlecom是否可用。从相同的命令提示符环境中还可以与SQLite数据库交互启动程序以及执行许多其他系统级任务。想像一下您正在连接到电话因此这是非常了不起的功能。在下一节您将创建一个简单的Android应用程序。编写一个基本的应用程序本节展示如何构建一个Android应用程序。示例应用程序非常简单:一个修改后的“HelloAndroid”应用程序。您将进行一个微小的修改使屏幕背景全部变为白色以便把手机用作手电筒。这个例子不是很有创意但是可以作为一个有用的例子。请下载完整的源代码。为了在Eclipse中创建应用程序选择File>New>Androidproject这将启动NewAndroidProject向导。回页首Android开发简介接下来创建一个简单的应用程序该应用程序有一个活动并且在mainxml中有一个UI布局。布局包含一个文本元素您将修改这个文本元素以显示AndroidFlashLight。下面的清单显示了这个简单的布局。清单Flashlight布局<xmlversion=""encoding=""><LinearLayoutxmlns:android="http:schemasandroidcomapkresandroid"android:orientation="vertical"android:layoutwidth="fillparent"android:layoutheight="fillparent"android:background="colorallwhite"><TextViewandroid:layoutwidth="fillparent"android:layoutheight="wrapcontent"android:text="stringhello"android:textColor="colorallblack"android:gravity="centerhorizontal"><LinearLayout>在stringsxml中创建两个颜色资源。清单stringsxml中的颜色<xmlversion=""encoding=""><resources><stringname="hello">AndroidFlashLight<string><stringname="appname">FlashLight<string><colorname="allwhite">#FFFFFF<color><colorname="allblack">#<color><resources>主屏幕布局有一个定义为allwhite的背景色。在stringsxml文件中可以看到allwhite被定义为一个值为#FFFFFF的RGB三元组即纯白。布局包含一个TextView这实际上是一块静态文本。它是不可编辑的。文本被设为黑色并通过gravity属性设为水平居中。该应用程序有一个名为FlashLightjava的Java源文件如以下清单所示。清单FlashlightjavapackagecommsiflashlightimportandroidappActivityimportandroidosBundlepublicclassFlashLightextendsActivity{**Calledwhentheactivityisfirstcreated*publicvoidonCreate(BundlesavedInstanceState){superonCreate(savedInstanceState)setContentView(Rlayoutmain)}Android开发简介}该代码是直接来自NewProject向导的模板代码:它是Java包commsiflashlight的一部分。它有两个import:o一个用于activity类o一个用于bundle类当该活动发起后onCreate方法被调用传入一个savedInstanceState。对于我们来说不必关心这个bundle。只有在暂停然后恢复活动时才会用到。onCreate方法覆盖了同名的activity类方法。它调用超类的onCreate方法。对setContentView()的调用将关联mainxml文件中定义的UI布局。mainxml和stringsxml中的任何内容都自动映射到Rjava源文件中定义的常量。任何时候都不要直接编辑这个文件因为它随着每次构建而改变。运行该应用程序可以看到一个白色屏幕其中有黑色文本。下面显示用于FlashLight应用程序的AndroidManifestxml文件。清单用于FlashLight的AndroidManifestxml<xmlversion=""encoding=""><manifestxmlns:android="http:schemasandroidcomapkresandroid"package="commsiflashlight"android:versionCode=""android:versionName=""><applicationandroid:icon="drawableicon"android:label="stringappname">Android开发简介<activityandroid:name="FlashLight"android:label="stringappname"><intentfilter><actionandroid:name="androidintentactionMAIN"><categoryandroid:name="androidintentcategoryLAUNCHER"><intentfilter><activity><application><manifest>该文件是由用于Eclipse的AndroidDeveloperTools插件自动创建的。您不需要做任何事情。当然这个应用程序并不是很强大。但是如果希望读点书又不想打扰正在睡觉的爱人或者如果需要在断电时去地下室查看保险丝盒那么这个应用程序还是很方便的。结束语在本文中您阅读了对Android的简介并构建了一个小型的应用程序。希望本文中的例子能激起您进一步探索Android平台的兴趣。Android有望成为对市场产生深远影响的开源平台它的用处将远远超越移动电话。回页首手机上的Scala手机上的Scala使用Android、Scala和Eclipse创建移动应用程序Android操作系统为移动开发提供强大、开放的平台。它利用了Java™编程语言和Eclipse工具平台的威力。现在还可以将Scala编程语言加入到其中。在本文中您将看到如何使用Scala作为Android上的主要开发语言从而可以使用一种更具表达力、更加类型安全的编程语言编写移动应用程序。先决条件在本文中我们将创建一个在Android设备上运行的移动应用程序。您将需要安装AndroidSDK本文使用VSDK。应用程序代码将用Scala编程语言编写。如果您从来没用过Scala那么没有关系因为本文将解释Scala代码。但是即使您不熟悉Scala建议您至少熟悉Java语言。本文使用ScalaV进行开发。对于Android和Scala都提供了很好的Eclipse插件。本文使用EclipseV和AndroidDevelopmentTools(ADT)V以及ScalaIDE插件V。请参阅参考资料获得所有这些工具。设置编写Android应用程序听起来像是一个复杂的命题。Android应用程序在它们自己的虚拟机中运行:Dalvik虚拟机。但是Android应用程序的构建路径是开放的。下面表明了我们将使用的基本策略。图Android上Scala的构建路径其思想是我们首先将所有Scala代码编译成Java类文件。这是Scala编译器的工作所以这方面没什么太复杂的事情。接下来获取Java类文件使用Androiddex编译器将类文件编译成Android设备上的DalvikVM使用的格式。这就是所谓的dexing也是Android应用程序的常规编译路径。通常要经历从java文件到class文件再到dex文件的过程。在本文惟一不同的是我们从scala文件开始。最后dex文件和其他应用程序资源被压缩成一个APK文件该文件可安装到Android设备上。那么如何让这一切发生?我们将使用Eclipse做大部分工作。但是此外还有一个较复杂的步骤:要让代码运行还需要来自标准Scala库中的代码。在典型的Scala安装中这是libscalalibraryjar中一个单独的JAR。但是这个JAR包括一些不受Android支持的代码。有些代码需要稍作调整有些代码则必须移除。scalalibraryjar的定制构建是运行得最好的至少目前是这样。请参阅参考资料了解这里使用的定制构建。我们将把这个JAR称作Android库JAR。有了这个JAR剩下的事情就很容易了。只需使用Eclipse的ADT插件创建一个Android项目。然后将一个Scala特性(nature)添加到项目中。用前面谈到的Android库替代标准的Scala库。最后将输出目录添加到类路径中。现在可以开始了。主Scala站点对此有更详细的描述(请参阅参考资料)。现在我们有了基本的设置接下来看看我们将使用Scala创建的Android应用程序。UnitsConverter现在我们知道如何利用Scala代码将它转换成将在Android设备上运行的二进制格式接下来可以使用Scala创建一个移回页首回页首手机上的Scala动应用程序。我们将创建的应用程序是一个简单的单位转换应用程序。通过这个应用程序可以方便地在英制单位与公制单位之间来回转换。这是一个非常简单的应用程序但是我们将看到即使是最简单的应用程序也可以从使用Scala中获益。我们首先看看UnitsConverter的布局元素。创建布局您也许对编写手机上运行的Scala感到兴奋但是并非所有的移动开发编程都应该用Scala或Java语言完成。AndroidSDK提供了一种很好的方式使用基于XML的布局系统将用户界面代码与应用程序逻辑分离。我们来看看本文中的应用程序的主要布局文件如清单所示。清单Converter应用程序的主要布局<xmlversion=""encoding=""><RelativeLayoutxmlns:android="http:schemasandroidcomapkresandroid"android:layoutwidth="fillparent"android:layoutheight="fillparent"android:gravity="centerhorizontal"android:padding="px"><TextViewandroid:id="idpromptlabel"android:layoutwidth="wrapcontent"android:layoutheight="wrapcontent"android:text="stringpromptmetric"><EditTextandroid:id="idamount"android:layoutbelow="idpromptlabel"android:layoutwidth="fillparent"android:layoutheight="wrapcontent"><TextViewandroid:id="iduomlabel"android:layoutbelow="idamount"android:layoutwidth="wrapcontent"android:layoutheight="wrapcontent"android:text="stringuom"><Spinnerandroid:id="iduomvalue"android:layoutbelow="iduomlabel"android:layoutwidth="wrapcontent"android:layoutheight="wrapcontent"><Buttonandroid:id="idconvertbutton"android:layoutbelow="iduomvalue"android:layoutwidth="wrapcontent"android:layoutheight="wrapcontent"android:text="stringconvertbuttonlabel"><TextViewandroid:id="idresultvalue"android:layoutbelow="idconvertbutton"android:layoutwidth="fillparent"android:layoutheight="fillparent"><RelativeLayout>以上代码非常简洁地创建了该应用程序的主UI。它的根节点是一个RelativeLayout容器元素。AndroidSDK中有很多布局选项。RelativeLayout指示运行时使用相对定位对不同的UI小部件进行布局。要使用相对定位可添加可见元素在这里是一个TextView元素。这是用于显示文本的一个简单的元素。它被赋予一个IDpromptlabel。接下来的元素即一个EditText元素(一个文本输入框)将用到它。这个元素有一个layoutbelow属性它的值等于promptlabelID。换句话说EditText应该放在名为promptlabel的元素的下方。布局代码剩下的部分非常简单。有一个带标签的文本输入框、一个带标签的微调器(一个组合框或下拉框)、一个按钮和一个用于输手机上的Scala出的文本框。图显示正在运行的应用程序的一个截图其中标出了不同的元素。图AndroidlLayout分解图那么以上视图中看到的不同文本值来自哪里呢?注意清单中的一些元素有一个text属性。例如promptlabel元素有一个等于stringpromptmetric的text属性。这表明它将使用Android应用程序中一个标准的资源文件:stringsxml文件如清单所示。清单stringsxml资源手机上的Scala<xmlversion=""encoding=""><resources><stringname="promptmetric">Enteramount(KM,g,L,C)<string><stringname="promptenglish">Enteramount(miles,lbs,gallons,F)<string><stringname="uom">UnitsofMeasure<string><stringname="convertbuttonlabel">Convert<string><stringname="appname">Converter<string><stringname="englishunits">English<string><stringname="metricunits">Metric<string><resources>现在可以看到图中所有的文本来自何处。微调器有一个下拉框其中包含可用于度量的单位那些单位在清单中没有列出。相反它们来自另一个文件arraysxml如清单所示。清单arraysxml资源<xmlversion=""encoding=""><resources><arrayname="englishunits"><item>Fahrenheit<item><item>Pounds<item><item>Ounces<item><item>FluidOunces<item><item>Gallons<item><item>Miles<item><item>Inches<item><array><arrayname="metricunits"><item>Celsius<item><item>Kilograms<item><item>Grams<item><item>Millileters<item><item>Liters<item><item>Kilometers<item><item>Centimeters<item><array><resources>现在我们可以看到将用于微调器的那些值。那么这些值如何出现在微调器中应用程序如何在英制单位与公制单位之间切换?要回答这些问题我们需要看看应用程序代码本身。回页首手机上的ScalaScala应用程序代码Converter应用程序的代码非常简单不管用什么语言编写。当然用Java编写起来非常容易但是用Scala编写也同样不复杂。首先我们看看前面见过的UI背后的代码。视图背后的代码解释创建UI的Scala代码的最简单方式是先看看代码然后走查一遍。对于任何应用程序都是在应用程序的AndroidManifestxml文件中定义应用程序的默认活动。任何UI背后都有一个Activity类默认的Activity定义当应用程序初次装载时执行的Activity类。对于像本文这样简单的应用程序有一个Converter类清单中显示了它的源代码。清单Converter活动类classConverterextendsActivity{importConverterHelperprivatethisvaramountValue:EditText=privatethisvaruom:Spinner=privatethisvarconvertButton:Button=privatethisvarresultValue:TextView=overridedefonCreate(savedInstanceState:Bundle){superonCreate(savedInstanceState)setContentView(Rlayoutmain)uom=findViewById(Riduomvalue)asInstanceOfSpinnerthissetUomChoice(ENGLISH)amountValue=findViewById(Ridamount)asInstanceOfEditTextconvertButton=findViewById(Ridconvertbutton)asInstanceOfButtonresultValue=findViewById(Ridresultvalue)asInstanceOfTextViewconvertButtonsetOnClickListener(()=>{valunit=uomgetSelectedItemasInstanceOfStringvalamount=parseDouble(amountValuegetTexttoString)valresult=UnitsConverterconvert(Measurement(unit,amount))resultValuesetText(result)})}overridedefonCreateOptionsMenu(menu:Menu)={superonCreateOptionsMenu(menu)menuadd(NONE,,,Rstringenglishunits)menuadd(NONE,,,Rstringmetricunits)true}overridedefonMenuItemSelected(featureId:Int,item:MenuItem)={superonMenuItemSelected(featureId,item)setUomChoice(if(itemgetItemId==)METRICelseENGLISH)true}private手机上的ScaladefsetUomChoice(unitOfMeasure:UnitsSystem){if(uom==){uom=findViewById(Riduomvalue)asInstanceOfSpinner}valarrayId=unitOfMeasurematch{caseMETRIC=>Rarraymetricunitscase=>Rarrayenglishunits}valunits=newArrayAdapterString(this,Rlayoutspinnerview,getResourcesgetStringArray(arrayId))uomsetAdapter(units)}}我们从这个类的顶部开始。它扩展androidappActivity。这是一个Java类但是从Scala中可以对Java类轻松地进行细分。接下来它有一些实例变量。每个实例变量对应前面定义的一个UI元素。注意每个实例变量还被限定为privatethis。这演示了Scala中特有的一种访问控制级别而Java语言中不存在这种访问控制。这些变量不仅是私有的而且只属于Converter类的特定实例。这种级别的访问控制对于移动应用程序来说有些大材小用但是如果您是一名Scala开发人员可以放心地在Android应用程序上使用您熟悉的语法。回到清单中的代码注意我们覆盖了onCreate方法。这是Activity类中定义的方法通常被定制的Activity覆盖。如果用Java语言编写该代码那么应该添加一个Override标注。在Scala中override是一个关键词用于确保正确性。这样可以防止误拼方法名之类的常见错误。如果误拼了方法名Scala编译器将捕捉到方法名并返回一个错误。注意在这个方法上以及任何其他方法上不需要声明返回类型。Scala编译器可以轻松推断出该信息所以不需要多此一举。onCreate中的大部分代码类似于Java语言编写的代码。但是有几点比较有趣。注意我们使用findViewById方法(在Activity子类中定义)获得不同UI元素的句柄。这个方法不是类型安全的需要进行类型转换(cast)。在Scala中要进行类型转换可使用参数化方法asInstanceOfT其中T是要转换的类型。这种转换在功能上与Java语言中的转换一样。不过Scala有更好的语法。接下来注意对setUomChoice的调用(稍后我们将详细谈到这个方法)。最后注意上述代码获得一个在布局XML中创建的按钮的句柄并添加一个单击事件处理程序。如果用Java语言编写那么必须传入Android接口OnClickListener的一个实现。这个接口只定义一个方法:onClick。实际上您关心的只是那个方法但是在Java语言中无法直接传入方法。而在Scala中则不同在Scala中可以传入方法字面量(literal)或闭包。在这里我们用语法()=>{}表示闭包其中方法的主体就是花括号中的内容。开始结束括号表示一个不带参数的函数。但是我将这个闭包传递到Button的一个实例上的setOnClickListener方法Button是AndroidSDK中定义的一个Java类。如何将Scala闭包传递到JavaAPI?我们来看看。Android上的函数式编程为了理解如何让AndroidAPI使用函数字面量看看Converter类定义的第一行。这是一条重要的语句。这是Scala的另一个很好的特性。您可以在代码的任何地方导入包、类等它们的作用域限于导入它们的文件。在这里我们导入ConverterHelper中的所有东西。清单显示ConverterHelper代码。清单ConverterHelperobjectConverterHelper{importandroidviewViewOnClickListener回页首手机上的ScalaimplicitdeffuncToClicker(f:View=>Unit):OnClickListener=newOnClickListener(){defonClick(v:View)=fapply(v)}implicitdeffuncToClicker(f:()=>Unit):OnClickListener=newOnClickListener(){defonClick(v:View)=fapply}}这是一个Scala单例(singleton)因为它使用对象声明而不是类声明。单例模式被直接内置在Scala中可以替代Java语言中的静态方法或变量。在这里这个单例存放一对函数:funcToClicker和funcToClicker。这两个函数以一个函

用户评价(1)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

评分:

/32

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利