版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章Android概述-2-本章目标了解移动信息设备分类了解Android的历史和优缺点熟悉Android平台的体系架构掌握Android应用程序结构掌握Android应用程序的编写-3-面对巨大的移动应用开发市场,国内外的IT厂商纷纷推出各种各样的移动应用平台。目前主要有三大主流移动端开发平台:iOSWindowsPhoneAndroid这三大平台的用户体验各不相同,各有特色。这些系统之间的应用软件互不兼容,因此移动信息设备中的应用程序需要根据不同的操作系统进行专门的开发。移动设备开发平台iOSiOS是苹果公司开发的移动操作系统,目前用于苹果公司生产的iPhone、iPodtouch、iPad以及AppleTV等产品上,甚至用到了车载设备上。iOS凭借着系统的安全性、高度稳定性、简单易用的页面、令人惊叹的内置功能和硬件设备的独特设计赢得了移动平台的一席之地,也是目前移动应用平台的领跑者之一。-4-WindowsPhoneWindowsPhone(简称WP)是微软发布的一款移动操作系统,在2010年首次发布,与此同时,完全放弃了WindowsMobile,WindowsPhone具有一系列比较新颖的操作体验,主要生产厂商有:诺基亚、三星、HTC、中兴、华为等。目前最新版本为WindowsPhone8.1,相对于之前的版本,无论是在性能方面还是操作体验方面都有着非常大的提升,并且提高了其与PC端Windows操作系统整合度。-5-Android网络巨头Google公司发布的基于Linux平台的开源手机操作系统,主要使用于移动设备,但凭借着强大的开源机制,目前不仅仅用于手机、PAD等终端,更是应用到了如智能电视、车载导航、智能可穿戴设备和物联网设备中,正因Android采用的编码语言是JAVA,之前从事JAVA的开发人员可以很容易的过渡到Android开发上来,因此也吸引了很大一批JAVA开发人员投入到Android的开发中,获得更高的收入。-6-开放手机联盟开放手机联盟(OpenHandsetAlliance,OHA)由一群共同致力于构建更好的手持移动信息设备的公司组成。该组织由Google领导,包括移动运营商、手持设备制造商、零部件制造商、软件解决方案和平台提供商以及市场营销公司。目前已达34家-7-成员分类成员手机制造商台湾宏达国际电子(Palm等多款智能手机的代工厂)摩托罗拉(美国最大的手机制造商)韩国三星电子(仅次于诺基亚的全球第二大手机制造商)韩国LG电子移动运营商中国移动(全球最大的移动运营商,7.03亿用户)日本KDDI(2900万用户)日本NTTDoCoMo(5200万用户)美国SprintNextel(美国第三大移动运营商,5400万用户)意大利电信(意大利主要的移动运营商,3400万用户)西班牙Telefónica(在欧洲和拉美有1.5亿用户)T-Mobile(德意志电信旗下公司,在美国和欧洲有1.1亿用户)-8-半导体公司AudienceCorp(声音处理器公司)BroadcomCorp(无线半导体主要提供商)英特尔(Intel)MarvellTechnologyGroupNvidia(图形处理器公司)SiRF(GPS技术提供商)Synaptics(手机用户界面技术)德州仪器(TexasInstruments)高通(Qualcomm)惠普HP(Hewlett-PackardDevelopmentCompany,L.P)软件公司AplixAscendereBay的SkypeEsmertecLivingImageNMSCommunicationsNoserEngineeringAGNuanceCommunicationsPacketVideoSkyPopSonixNetworkTAT-TheAstonishingTribeWindRiverSystemsAndroid简介Android一词本意是指“机器人”,是Google公司推出的开源手机操作系统。Android作为Google移动互联网战略的重要组成部分,推进“随时随地为每个人提供信息”这一企业目标的实现,完善企业移动发展战略:通过与全球各地的手机制造商和移动运营商成为合作伙伴,开发即实用又有吸引力的移动服务,并推广这些产品。-9-Android的历史-10-时间事件2007年11月5日Google公司宣布组建一个全球性的开放手机联盟,创建时,联盟成员数量已经达到了34家2008年9月22日美国运营商T-Mobile在纽约正式发布第一款Google手机:T-MobileG12009年1月1日Google的Android应用程序市场(AppMarket)将在2009年初开始出售Android付费应用程序,标志着AndroidMarket营收的开始2009年11月25日AdMob的调查显示,在美国Android系统市场占有率11%,居于第三位2009年12月9日宏达电将逐渐放弃WindowsMobile系统,继而转向Android系统2009年12月23日Google在中国大陆推出中文版AndroidMarket,国内已经有开发者推出针对国内用户的AndroidMarket,易联致远公司已经推出名为eoeMarket的专门针对国内用户的第三方AndroidMarket2010年1月6日Google正式发布首款自有品牌手机NexusOne,该机采用Android2.1操作系统2010年2月24日全球瞩目的世界移动大会(MobileWorldCongress2010)召开2010年3月3日运营商AT&T宣布本月即将推出首款Android手机2010年3月10日网络分析公司Quantcast最新报告显示,Android市场占有率份额约15%,位居第三2010年5月20日Android2.2Froyo发布2010年12月7日Android2.3Ginerbread发布2011年5月7日Android的市场份额已占有43.7%,在智能手机中已位居第一2011年5月11日Android3.1Honeycomb发布,经过优化的Gmail电子邮箱;全面支持GoogleMaps;将Android手机系统跟平板系统再次合并从而方便开发者;任务管理器可滚动,支持USB输入设备(键盘、鼠标等);支持GoogleTV可以支持XBOX360无线手柄;widget支持的变化,能更加容易的定制屏幕widget插件2011年7月13日Android3.2Honeycomb发布,支持7英寸设备;引入了应用显示缩放功能2011年10月19日Android4.0IceCreamSandwich发布,全新的UI;截图功能;更强大的照片和编辑功能等Android的优缺点Android的优势主要体现在:系统的开放性和免费性移动互联网的发展相关厂商的大力支持Android也不是一个完美的系统,同样面临着许多挑战:用户体验不一致,安全性有待提高技术的进一步完善开放手机联盟模式的挑战其他技术的竞争-11-Android平台的技术架构-12-Android应用程序构成一个Android应用程序通常是由以下4个组件构成的:活动(Activity)意图(Intent)服务(Service)内容提供器(ContentProvider)-13-活动(Activity)活动(Activity)是最基本的Android应用程序组件。在应用程序中,一个活动通常就是一个单独的屏幕。每个活动都通过继承活动基类而被实现为一个独立的活动类。活动类将会显示由视图控件组成的用户接口,并对事件做出响应。-14-意图(Intent)Intent用来描述应用程序的功能。Intent是利用消息实现应用程序间的交互机制,能够在程序运行的过程中连接两个不同的组件。Intent描述了应用中一次操作的动作、数据以及附加数据,向Android表达某种请求或者意愿,Android系统会根据Intent描述的内容来选择适当的组件来响应,并将Intent传递给该组件,完成组件的调用。-15-服务(Service)服务是Android应用程序中具有较长的生命周期但是没有用户界面的程序。Service运行在后台,并且可以与其他程序进行交互。Service跟Activity的级别差不多,但是不能独立运行,需要通过某一个Activity来调用。Android应用程序的生命周期是由Android系统来决定的,不由具体的应用程序线程来控制。如果应用程序要求在没有界面显示的情况还能正常运行(要求有后台线程,而且直到线程结束,后台线程才会被系统回收),此时就需要用到Service。-16-内容提供器(ContentProvider)Android应用程序可以使用文件或SQLite数据库来存储数据。ContentProvider提供了一种多应用间数据共享的方式。一个ContentProvider类实现一组标准的方法,能够让其他的应用保存或读取此内容提供器处理的各种数据类型,即一个应用程序可以通过实现一个ContentProvider的抽象接口将自己的数据暴露出去。外界根本看不到,也不用看到该应用程序暴露的数据是如何存储的,但是外界可以通过这一套标准及统一的接口和应用程序里的数据打交道,可以读取应用程序的数据,也可以删除应用程序的数据。-17-第一个Android应用编写并运行Android的应用程序通常需要如下3个步骤:创建一个新的Android项目;创建一个启动配置;运行Android应用程序。-18-Android项目的架构src文件夹:用来存放项目的源文件
android.jar文件:包含构建应用程序所需的AndroidSDK库
资源引用文件资源目录图标文件界面布局文件字符串引用文件Android项目的总配置文件-19-字符串引用文件strings.xml-20-<?xmlversion="1.0"encoding="utf-8"?><resources><stringname="app_name">Ch01</string><stringname="hello_world">Helloworld!</string><stringname="action_settings">Settings</string></resources>界面布局文件activity_ch01.xml
<RelativeLayoutxmlns:android="/apk/res/android"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.dh.ch01.Ch01Activity"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/hello_world"/></RelativeLayout>-21--22-资源引用文件R.javapublicfinalclassR{publicstaticfinalclassattr{}publicstaticfinalclassdimen{publicstaticfinalintactivity_horizontal_margin=0x7f040000;publicstaticfinalintactivity_vertical_margin=0x7f040001;}publicstaticfinalclassdrawable{publicstaticfinalintic_launcher=0x7f020000;}publicstaticfinalclasslayout{publicstaticfinalintactivity_ch01=0x7f030000;}publicstaticfinalclassstring{publicstaticfinalintaction_settings=0x7f050002;publicstaticfinalintapp_name=0x7f050000;publicstaticfinalinthello_world=0x7f050001;}}-23-源文件Ch01Activity.javapublicclassCh01ActivityextendsActivity{ @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_ch01); } @Override publicbooleanonCreateOptionsMenu(Menumenu){ getMenuInflater().inflate(R.menu.ch01,menu); returntrue; } @Override publicbooleanonOptionsItemSelected(MenuItemitem){ intid=item.getItemId(); if(id==R.id.action_settings){ returntrue; } returnsuper.onOptionsItemSelected(item); }}-24-项目配置清单文件AndroidManifest.xml<manifestxmlns:android="/apk/res/android"package="com.dh.ch01"android:versionCode="1"android:versionName="1.0"><uses-sdkandroid:minSdkVersion="14"android:targetSdkVersion="14"/><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme"><activityandroid:name=".Ch01Activity"android:label="@string/app_name"><intent-filter><actionandroid:name="ent.action.MAIN"/><categoryandroid:name="ent.category.LAUNCHER"/></intent-filter></activity></application></manifest>根元素,指定了命名空间、包、版本代号及名称等信息图标标题类名标题过滤器程序的入口加载程序时运行SDK版本-25-运行结果:-26-小结:Android是Google公司推出的开源手机操作系统Android上的应用程序开发使用Java语言Android平台采用了软件栈的架构,主要分为活动、意图、服务和内容提供器四部分活动(Activity)是最基本的Android应用程序组件意图(Intent)利用消息实现应用程序间的交互机制服务(Service)是Android应用程序中具有较长的生命周期但是没有用户界面的程序内容提供器(ContentProvider)提供了一种多应用间数据共享的方式第2
章活动Activity-29-熟悉Android程序框架理解Activity的生命周期及方法掌握Activity的组织结构熟悉Android中各种资源的使用本章目标-30-ActivityActivity(活动)是Android应用程序中最基本的组成单位。Activity主要负责创建显示窗口,一个Activity对象通常就代表了一个单独的屏幕。Activity是用户唯一可以看得到的组件,用来与用户进行交互的。Activity是通过一个Activity栈来进行管理,当前显示的Activity被放到栈顶。importandroid.app.Activity;importandroid.os.Bundle;publicclassMyActivityextendsActivity{......}Activity生命周期-1Activity具有生命周期,在生命周期的过程中共有四种状态:激活或者运行状态:此时Activity运行在屏幕的前台;暂停状态:此时Activity失去了焦点但是仍然对用户可见,例如在该Activity上遮挡了一个透明的或者非全屏的Activity;停止状态:此时Activity被其他Activity完全覆盖;终止状态:此时Activity将会被系统销毁(清理出内存)。
注意:处于暂停状态和停止状态的Activity仍然保存了其所有的状态和成员信息,直到被系统终止。当被系统终止的Activity需要重新再显示的时候,它必须完全重新启动并且将关闭之前的状态全部恢复回来。
-31-Activity生命周期-2android.app.Activity类定义了Activity生命周期中所包含的全部方法:-32-publicclassActivityextendsApplicationContext{ protectedvoidonCreate(Bundleicicle); protectedvoidonStart(); protectedvoidonRestart(); protectedvoidonResume(); protectedvoidonFreeze(BundleoutIcicle); protectedvoidonPause(); protectedvoidonStop(); protectedvoidonDestroy();}Activity生命周期-3-33-方法功能描述下一个方法onCreate()Activity初次创建时被调用,在该方法中一般进行一些静态设置,如创建View视图、进行数据绑定等。如果Activity是首次创建,本方法后将会调用onStart(),如果Activity是停止后重新显示则调用onRestart()onStart()或onRestart()onStart()当Activity对用户即将可见的时候调用onRestart()或onResume()onRestart()当Activity从停止状态重新启动时调用onResume()onResume()当Activity将要与用户交互时调用此方法,此时Activity在Activity栈的栈顶,用户输入的信息可以传递给它。如果其他的Activity在它的上方恢复显示,则调用onPause()onPause()onPause()当系统要启动一个其他的Activity时(其他的Activity显示之前),这个方法将被调用,用于提交持久数据的改变、停止动画等onResume()或onStop()onStop()当另外一个Activity恢复并遮盖住当前的Activity,导致其对用户不再可见时,这个方法将被调用onStart()或onDestroy()onDestroy()在Activity被销毁前所调用的最后一个方法无Activity生命周期-4-34-Activity生命周期-5完整生命期:从Activity最初调用onCreate()方法到最终调用onDestroy()方法的这个过程称为完整生命周期。Activity会在onCreate()方法中进行所有全局状态的设置,在onDestroy()方法中释放其占据的所有资源。可见生命周期:从Activity调用onStart()方法开始,到调用对应的onStop()方法为止的这个过程称为可见生命周期。在这段时间内,用户可以在屏幕上看到这个Activity,尽管并不一定是在前台显示,也不一定可以与其交互。在这两个方法之间,用户可以维护Activity在显示时所需的资源。因为每当Activity显示或者隐藏时都会调用相应的方法,所以onStart()方法和onStop()方法在整个生命周期中可以多次被调用。前台生命周期:从Activity调用onResume()方法开始,到调用对应的onPause()方法为止的这个过程称为前台生命周期,这段时间当前的Activity处于其他所有Activity的前面,且可以与用户交互。-35-Logandroid.util.Log类提供了日志功能,使用Log类的下列静态方法可以输出各种级别的日志信息-36-静态方法级别分类功能说明v()verbose,对应DDMS的LogCat视图中的V最低级别,所有信息d()debug,对应DDMS的LogCat视图中的D调试信息i()info,对应DDMS的LogCat视图中的I一般信息w()warn,对应DDMS的LogCat视图中的W警告信息e()error,对应DDMS的LogCat视图中的E错误信息
上述方法都至少有下列两种重载形式(以d()为例):publicstaticintd(Stringtag,Stringmsg)publicstaticintd(Stringtag,Stringmsg,Throwabletr)
其中:tag为日志标记;msg为日志信息;tr为异常信息。Android中的资源使用Android中的资源是指非代码部分,是代码中使用的外部文件,如图片、音频、动画、字符串等,作为应用程序的一部分,这些文件将被编译到应用程序中。将资源与代码分离能够提高程序的可维护性,例如通过字符串资源文件可以轻松实现国际化。在Android工程中,资源文件分别存放在res和assets两个文件夹中:res目录存放Android程序能通过R资源类直接访问的资源;assets目录存放Android程序不能直接访问的资源(原生文件),如MP3文件,必须通过AssetManager类以二进制流的形式读取。-37-Android资源类型-38-目录结构存放的资源类型res/anim动画文件res/drawable图片文件res/layout布局文件res/xml任意的XML文件res/raw直接复制到设备中的原生文件res/menu菜单文件res/values各种XML资源文件:strings.xml:字符串文件arrays.xml:数组文件colors.xml:颜色文件dimens.xml:尺寸文件styles.xml:样式文件字符串资源-39-字符串是最简单的一种资源,程序用到的字符串资源需要在res/values/strings.xml文件中定义,在其他的资源文件中或代码中都可以访问字符串资源。<TextView ...... android:text="@string/hello_world"/>在代码中可通过“R.string.资源名称”的形式访问TextViewtv=......//初始化TextView控件tv.setText(R.string.hello_world);在其他资源文件中采用“@string/资源名称”的形式访问图片资源访问图片资源的方式与访问字符串资源也是类似的,在其他资源文件中可采用“@drawable/资源名称”的形式访问,在代码中可通过“R.drawable.资源名称”的形式访问。图片资源的使用与字符串资源非常类似,程序用到的图片资源需要存放在res文件夹中的drawable目录下,在其他的资源文件中或代码中都可以访问其中的图片资源。注意res/drawable-hdpi、res/drawable-mdpi、res/drawable-ldpi三个目录分别用于存放高、中、低三种分辨率下的图标文件,Android程序运行时,会自动根据当前分辨率到对应的目录下查找图片。-40--41-小结:Activity是Android应用程序中最基本的组成单位大部分的Android应用中包含多个Activity类Activity共有四种状态:激活或者运行状态、暂停状态、停止状态、终止状态控制Activity屏幕横竖屏显示方式,设置参数“android:screenOrientation”为landscape或portraitActivity被系统销毁时,保存必要信息,保证在Activity恢复时不被丢失每个Activity类在定义时都必须继承android.app.Activityandroid.app.Activity类中的方法定义了Activity完整的生命周期Android中的资源是指非代码部分,是代码中使用的外部文件对于字符串资源,在其他资源文件中使用“@string/资源名称”的形式访问,在代码中可通过“R.string.资源名称”的形式访问对于图片资源,在其他资源文件中使用“@drawable/资源名称”的形式访问,在代码中可通过“R.drawable.资源名称”的形式访问第3
章用户界面-44-熟悉基本的Android界面组件掌握UI的事件驱动机制掌握常用的Layout掌握对话框以及Toast组件的使用掌握常用的Widget组件掌握菜单组件的使用掌握ActionBar的使用本章目标-45-用户界面元素分类Android中的界面元素主要由以下几个部分构成:视图组件(View)视图容器(ViewGroup)布局管理(Layout)视图组件(View)View视图组件是用户界面的基础元素View对象存储了Andiord屏幕上一个特定的矩形区域的布局和内容属性的数据体通过View对象,可实现对布局、绘图、焦点变换、滚动条、屏幕区域的按键、用户交互等功能Android的窗体功能是通过Widget(窗体部件)类实现的,而View类是Widget的基类-46-View的主要子类-47-类名功能描述事件监听器TextView文本视图OnKeyListenerEditText编辑文本框OnEditorActionListenerButton按钮OnClickListenerCheckbox复选框OnCheckedChangeListenerRadioGroup单选按钮组OnCheckedChangeListenerSpinner下拉列表OnItemSelectedListenerAutoCompleteTextView自动完成文本框OnKeyListenerDataPicker日期选择器OnDateChangedListenerTimePicker时间选择器OnTimeChangedListenerDigitalClock数字时钟OnKeyListenerAnalogClock模拟时钟OnKeyListenerProgessBar进度条OnProgressBarChangeListenerRatingBar评分条OnRatingBarChangeListenerSeekBar搜索条OnSeekBarChangeListenerGridView网格视图OnKeyDown,OnKeyUpLsitView列表视图OnKeyDown,OnKeyUpScrollView滚动视图OnKeyDown,OnKeyUp视图容器组件(ViewGroup)ViewGroup是View的容器,可将View添加到ViewGroup中,一个ViewGroup也可以加入到另外一个ViewGroup里。-48-方法功能描述ViewGroup()构造方法voidaddView(Viewchild)用于添加子视图voidbringChildToFront(Viewchild)将参数指定的视图移动到所有视图的前面显示booleanclearChildFocus(Viewchild)清除参数指定的视图的焦点booleandispatchKeyEvent(KeyEventevent)将参数指定的键盘事件分发给当前焦点路径的视图。分发判断事件时,按照焦点路径查找合适的视图。若本视图为焦点,则将键盘事件发送给自己;否则发送给焦点视图booleandispatchPopulateAccessibilityEvent(AccessibilityEventevent)将参数指定的事件分发给当前焦点路径的视图booleandispatchSetSelected(booleanselected)为所有的子视图调用setSelected()方法布局管理Layout布局管理Layout用来管理组件的布局格式,组织界面中组件的呈现方式。Android提供了多种布局:LinearLayout:线性布局,该布局中子元素之间成线性排列,即在某一方向上的顺序排列,常见的有水平顺序排列、垂直顺序排列。RelativeLayout:相对布局,该布局是一种根据相对位置排列元素的布局方式,这种方式允许子元素指定他们相对于其它元素或父元素的位置(通过ID指定)。相对于线性布局,使用RelativeLayout布局可任意放置控件,没有规律性。需要注意线性布局不需要特殊指定其父元素,而相对布局使用之前必须指定其参照物,只有指定参照物之后,才能定义其相对位置。TableLayout:表格布局,该布局将子元素的位置分配到表格的行或列中,即按照表格的顺序排列。一个表格布局有多个“表格行”,而每个表格行又包含表格单元。需要注意,表格布局并不是真正意义上的表格,只是按照表格的方式组织元素的布局,元素之间并没有实际表格中的分界线。AbsoluteLayout:绝对布局,按照绝对坐标对元素进行布局。与相对布局相反,绝对布局不需要指定其参照物,而是使用整个手机界面作为坐标系,通过坐标系的两个偏移量(水平偏移量和垂直偏移量)来唯一指定其位置。FrameLayout:框架布局,将所有子元素以层叠的方式显示,后加的元素会被放在最顶层,覆盖之前的元素,实际中很少用到。GridLayout:网格布局,Android4.0新增的布局方式,能够同时对x、y轴的控件进行对齐,大大的简化了对复杂布局的处理,并且在性能上也有大幅提升。注意Android的表格布局跟HTML中的表格布局非常类似,TableRow相当于HTML表格的<tr>标记。-49-事件处理机制Android系统中引用Java的事件处理机制,包括事件、事件源和事件监听器三个事件模型:事件(Event):是一个描述事件源状态改变的对象,事件不是通过new运算符创建的,而是由用户操作触发的。事件可以是键盘事件、触摸事件等。事件一般作为事件处理方法的参数,以便从中获取事件的相关信息。事件源(EventSource):产生事件的对象,事件源通常是UI组件,例如点击按钮,则按钮就是事件源。事件监听器(EventListenrer):当事件产生时,事件监听器用于对该事件进行响应和处理。监听器需要实现监听接口中定义的事件处理方法。-50-事件监听器-51-事件监听器接口事件说明OnClickListener单击事件当用户点击某个组件时OnFocusChangeListener焦点事件组件获得或者失去焦点时OnKeyListener按键事件用户按下或者释放设备上的某个按键OnTouchListener触碰事件设备具有触摸屏功能时,触碰屏幕时产生OnCreateContextMenuListener创建上下文菜单事件创建上下文菜单时产生该事件OnCheckedChangeListener选项事件选择改变时触发该事件实现事件处理步骤如下:创建事件监听器;在事件处理方法中编写事件处理代码;在相应的组件上注册监听器。布局管理(Layout)Android中提供了两种创建布局的方式:在XML布局文件中声明:这种方式是将需要显示的组件先在布局文件中进行声明,然后在程序中通过setContentView(R.layout.XXX)方法将布局呈现在Activity中。这种方式是推荐使用的方式,前面的程序也一直使用这种方式。在程序中通过代码直接实例化布局及其组件:这种方式并不提倡使用,除非界面中的组件及布局需要动态改变才使用。-52-线性布局-1LinearLayout是一种线性排列的布局,该布局中的子组件按照垂直或者水平方向排列,方向由“android:orientation”属性控制,属性值有垂直(vertical)和水平(horizontal)两种。-53-<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android" android:orientation="vertical"android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayoutandroid:orientation="horizontal" android:layout_width="fill_parent"android:layout_height="fill_parent" android:layout_weight="1"> …… </LinearLayout> <LinearLayoutandroid:orientation="vertical" android:layout_width="fill_parent"android:layout_height="fill_parent" android:layout_weight="1"> ……
</LinearLayout></LinearLayout>第一个LinearLayout按照垂直方向来布局,并将其他两个LinearLayout包含进来,是整个布局的主布局第二个LinearLayout按照水平方向来布局,包含4个TextView第三个LinearLayout按照垂直方向来布局,也包含4个TextView线性布局-2在LayoutActivity中设置使用linearlayout.xml布局,代码如下所示:-54-publicclassLayoutActivityextendsActivity{ /**Calledwhentheactivityisfirstcreated.*/ @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.linearlayout); }}表格布局TableLayout以行、列表格的方式布局子组件。TableLayout中使用TableRow对象来定义行。<TableLayout>元素定义了表格布局,该元素的“android:collapseColumns”属性用于指明表格的列数,此处设置表格的列数为3;“android:stretchColumns”属性用于指明表格的伸展列,指定的伸展列将进行拉伸以填满剩余的空间。注意列号从0开始,此处值为“1”,代表第二列是伸展列。<TableRow>元素定义了表格中的行,所有的其他组件都放在该元素内。-55-相对布局RelativeLayout是按照组件之间的相对位置来布局,如在某个组件的左边、右边、上面和下面等。-56-<Buttonandroid:text="B"android:id="@+id/b" android:layout_toRightOf="@+id/a"/><Buttonandroid:text="B"android:id="@+id/b" android:layout_toLeftOf="@+id/a"/><Buttonandroid:text="B"android:id="@+id/b" android:layout_below="@+id/a"/><Buttonandroid:text="B"android:id="@+id/b" android:layout_above="@+id/a"/>按钮B在按钮A的右边:按钮B在按钮A的左边则:按钮B在按钮A的下面则:按钮B在按钮A的上面则:绝对布局AbsoluteLayout通过指定组件的确切X、Y坐标来确定组件的位置。例如:-57-<Buttonandroid:text="A"android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_x="20px" android:layout_y="20px"/>网格布局GridLayout以网格方式布局子组件,使子组件x、y轴自动对齐。例如:-58-<GridLayoutxmlns:android="/apk/res/android"android:layout_width="wrap_content"android:layout_height="wrap_content"android:columnCount="4"android:orientation="horizontal"android:rowCount="3">
<Buttonandroid:layout_columnSpan="2“android:layout_gravity="fill"android:text="1.1"/>
<Buttonandroid:text="1.2"/>
<Buttonandroid:layout_gravity="fill"android:layout_rowSpan="2"android:text="1.3"/><Buttonandroid:layout_columnSpan="3"android:layout_gravity="fill"android:text="2.1"/>
<Buttonandroid:text="3.1"/><Buttonandroid:text="3.2"/><Buttonandroid:text="3.3"/><Buttonandroid:text="3.4"/></GridLayout>框架布局FrameLayout以层叠的方式显示子组件。后者会覆盖前者。例如:-59-<FrameLayoutxmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/flower"/><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:background="@drawable/ic_launcher"/></FrameLayout>提示信息(Toast)提示信息(Toast)是Android中用来显示提示信息的一种机制,与对话框不同,Toast是没有焦点的,而且Toast显示时间有限,过一定的时间会自动消失。Toast类定义在android.widget包中,其常用的方法-60-方法功能说明Toast(Contextcontext)构造函数setDuration(intduration)设置提示信息显示的时长,可以设置两种值:Toast.LENGTH_LONG和Toast.LENGTH_SHORTsetText(CharSequences)设置显示的文本cancel()关闭提示信息,即不显示makeText(Contextcontext,CharSequencetext,intduration)该方法是静态方法,用于直接创建一个带文本的提示信息,并指明时长show()显示提示信息调用Toast的静态方法makeText()创建一个指定文本和时长的提示信息。调用Toast的show()方法显示提示信息。创建Toast的步骤可以如下:对话框Android系统中提供了四种对话框:注意:除了上面的四种系统定义的对话框,用户还可以继承android.app.Dialog实现自己的对话框。-61-对话框说明AlertDialog提示对话框ProgressDialog进度对话框DatePickerDialog日期选择对话框TimePickerDialog时间选择对话框提示对话框AlertDialogAlertDialog是一个提示窗口,要求用户做出选择。创建提示对话框的步骤如下:获得AlertDialog的静态内部类Builder对象,由该类来创建对话框。通过Builder对象设置对话框的标题、按钮以及按钮将要相应的事件。调用Builder的Create()方法创建对话框。调用AlertDialog的show()方法显示对话框。-62-常用Widget组件Widget组件是窗体中使用的部件,都定义在android.widget包中常用的Widget组件有:ButtonTextViewEditTextCheckBoxRadioGroupSpinner-63-Widget组件通用属性对Widget组件进行UI设计时可以采用XML布局文件和Java代码两种方式Widget所有的组件几乎都属于View类,其通用属性如下:-64-属性名称描述android:id设置控件的索引,Java程序可通过R.id.<索引>引用该控件android:layout_height设置布局高度,可以通过三种方式来指定高度:fill_parent(和父元素相同)、wrap_content(随组件本身的内容调整)、通过指定px值来设置高度android:layout_width设置布局宽度,也可以采用三种方式:fill_parent、wrap_content、指定px值android:autoLink设置是否当文本为URL链接,文本显示为可点击的链接。可选值为(none/web/email/phone/map/all)android:autoText如果设置,将自动执行输入值的拼写纠正android:bufferType指定getText()方式取得的文本类别android:capitalize设置英文字母大写类型。需要弹出输入法才能看得到android:cursorVisible设定光标为显示/隐藏,默认显示android:digits设置允许输入哪些字符,如“1234567890.+-*/%\n()”android:drawableBottom在text的下方输出一个drawableandroid:drawableLeft在text的左边输出一个drawableandroid:drawablePadding设置text与drawable(图片)的间隔,与drawableLeft、drawableRight、drawableTop、drawableBottom一起使用,可设置为负数,单独使用没有效果。android:drawableRight在text的右边输出一个drawable对象android:inputType设置文本的类型,用于帮助输入法显示合适的键盘类型android:cropToPadding是否截取指定区域用空白代替;单独设置无效果,需要与scrollY一起使用android:maxHeight设置View的最大高度文本框(TextView)TextView类代表文本框,是屏幕中一块用于显示文本的区域TextView属于android.widget包并且继承android.view.View类的方法和属性,同时又是Button、CheckedTextView、Chronometer、DigitaClock以及EditText的父类。-65-方法功能描述TextView()TextView的构造方法getDefaultMovementMethod()获取默认的箭头按键移动方式getText()取得文本内容length()获取TextView中文本长度getEditableText()取得文本的可编辑对象,通过该对象可对TextView的文本进行操作,如在光标之后插入字符getLayout()获取TextView的布局getKeyListener()获取键盘监听对象setKeyListener()设置键盘事件监听setTransformationMethod()设置文本是否显示成特殊字符getCompoundPaddingBottom()该方法返回TextView的底部填充物setCompoundDrawables()设置Drawable图像显示的位置,在设置该Drawable资源之前需要调用setBounds(Rect)TextView的主要方法:方法功能描述setCompoundDrawablesWithIntrinsicBounds()设置Drawable图像显示的位置,但其边界不变setPadding()根据位置设置填充物getAutoLinkMask()返回自动链接的掩码setTextColor()设置文本显示的颜色setHighlightColor()设置选中时文本显示的颜色setShadowLayer()设置文本显示的阴影颜色setHintTextColor()设置提示文字的颜色setLinkTextColor()设置链接文本的颜色setGravity()设置当TextView超出了文本本身时横向以及垂直对齐编辑框EditText类是TextView的子类,其功能与TextView基本类似,主要区别是EditText可以编辑。EditText提供了许多用于设置和控制文本框功能的方法:-66-方法功能描述getText()获取文本内容selectAll()获取输入的所有文本setText(CharSequencetext,TextView.BufferTypetype)设置编辑框中的文本内容复选框-1CheckBox是复选框组件,用于多选的情况下,该控件在应用程序中为用户提供“真/假”选择。CheckBox类提供了用于设置和控制复选框的方法:-67-方法功能描述dispatchPopulateAccessibilityEvent()在子视图创建时,分派一个辅助事件isChecked()判断组件状态是否勾选onRestoreInstanceState()设置视图恢复以前的状态,该状态由onSaveInstanceState()方法生成performClick()执行Click动作,该动作会触发事件监听器setButtonDrawable()根据Drawable对象设置组件的背景setChecked()设置组件的状态。若参数为真,则置组件为选中状态;否则置组件为未选中状态setOnCheckedChangeListener()CheckBox常用的设置事件监听器的方法,状态改变时调用该监听器toggle()改变按钮的当前状态drawableStateChanged()视图状态的变化影响到所显示可绘制的状态时调用该方法onCreateDrawableState()获取文本框为空时,文本框默认显示的字符串onCreateDrawableState()为当前视图生成新的Drawable状态复选框-2复选框是一种双状态按钮的特殊类型,复选框的状态只有两种:选中或者未选中状态,因此复选框状态变化包含两种情况:选中状态→未选中状态未选中状态→选中状态通过鼠标单击复选框,可触发复选框状态的改变。通过setOnCheckedChangeListener()方法注册监听复选框状态改变监听器OnCheckedChangeListener。-68-单选按钮组RadioGroup是单选按钮组,用于实现一组按钮之间相互排斥,即有且仅有一个按钮被选中,在同一个单选按钮组中勾选一个按钮则会取消该组中其它已经勾选的按钮的选中状态。RadioGroup类是LinearLayout的子类,其常用的设置和控制单选按钮组的方法-69-方法功能描述addView()根据布局指定的属性添加一个子视图check()当传递-1作为指定的选择标识符,此方法同clearCheck()方法作用等效generateLayoutParams()返回一个新的布局实例,这个实例是根据指定的属性集合生成的setOnCheckedChangeListener()注册单选按钮状态改变监听器getCheckedRadioButtonId()返回该单选按钮组中所选择的单选按钮的标识ID下拉列表-70-方法功能描述getBaseline()获取组件文本基线的偏移getPrompt()获取被聚焦时的提示消息performClick()效果同鼠标单击一样,该方法执行会触发OnClickListenersetAdapter(SpinnerAdapteradapter)设置选项,适配器adapter用于给下拉列表提供选项数据setPromptId()设置对话框弹出的时候显示的文本setOnItemSelectedListener()设置下拉列表子项被选中监听器Spinner提供了下拉列表功能,其功能类似于RadioGroup,多个item子元素组合成一个Spinner,这些子元素之间相互影响,同时最多有一个子元素被选中。Spinner类是LinearLayout的子类数组适配器Spinner可以通过数组适配器读取XML中定义的子元素。Android系统提供了多种适配器,其中ArrayAdapter是比较简单且经常使用的一种数组适配器,它将数据放入一个数组以便显示。-71-ArrayAdapter(Contextcontext,intresource,inttextViewResId)ArrayAdapter(Contextcontext,inttextViewResId,T[]objects)ArrayAdapter(Contextcontext,inttextViewResId,List<T>objects)上下文环境,在Activity中一般使用this资源id文本视图资源id泛型数组
泛型集合
//获取下拉列表组件Spinnerposition=(Spinner)findViewById(R.id.position);//创建一个下拉列表选项数组String[]strs={"总裁","经理","秘书"};//创建一个数组适配器ArrayAdapteraa=newArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item,strs);//设置下拉列表的适配器position.setAdapter(aa);图片视图-1ImageView可显示图像资源ImageView类常用方法-72-方法功能描述ImageView()ImageView构造函数setAdjustViewBounds(booleanab)设置是否保持高宽比。需要结合maxWidth和maxHeight一起使用getDrawable()获取Drawable对象;若获取成功则返回Drawable对象,否则返回nullgetScaleType()获取视图的填充方式setImageBitmap(Bitmapbm)设置位图setAlpha(intalpha)设置透明度,值范围为0~255,其中0为完全透明,255为完全不透明setMaxHeight(inth)设置控件的最大高度setMaxWidth(intw)设置控件的最大宽度setImageURI(Uriuri)设置图片地址,图片地址使用URI指定setImageResource(intrid)设置图片资源库setColorFilter(intcolor)设置颜色过滤,需要制定颜色过滤矩阵图片视图-2ImageView可通过两种方式设置资源:通过setImageBitmap()方法设置图片资源;通过<ImageView>XML元素的android:src属性,或setImageResource(int)方法指定ImageView的图片。使用ImageView的代码如下:-73-imageview=(ImageView)findViewById(R.id.imageview);bitmap=BitmapFactory.decodeResource(this.getResources(),R.drawable.motor);imageview.setImageBitmap(bitmap);滚动视图ScrollView提供了滚动功能,可在界面上显示比实际多的内容时提供滚动效果ScrollView的子元素可以包含复杂的布局,通常用的子元素是垂直方向的LinearLayout。注意ScrollView只支持垂直方向的滚动,不支持水平方向的移动。-74-滚动视图-ScrollView常用方法-75-方法功能描述ScrollView()ScrollView构造函数dispatchKeyEvent(KeyEventevent)将参数指定的键盘事件分发给当前焦点路径的视图arrowScroll(intdirection)该方法响应点击上下箭头时对滚动条滚动的处理,参数direction指定了滚动的方向addView(Viewchild)添加子视图computeScroll()更新子视图的值(mScrollX和mScrollY)onTouchEvent(MotionEventev)该方法用于运动事件,该运动事件是在处理触摸屏幕产生的setOnTouchListener()设置ImageButton单击事件监听setColorFilter()设置颜色过滤,需要制定颜色过滤矩阵executeKeyEvent(KeyEventevent)当接收到键盘事件时,此函数执行滚动操作fullScroll(intdirection)将视图滚动到direction指定的方向onInterceptTouchEvent(MotionEventme)此方法用于拦截用户的触屏事件网格视图GridView网格视图将其子元素组织成类似于网格状的视图。一个网格视图通常需要一个列表适配器ListAdapter,该适配器包含网格视图的子元素组件。GridView的视图排列方式与矩阵类似网格视图能够以数据网格形式显示子元素,并能够对这些子元素进行分页、自定义样式等操作-76-网格视图-GridView常用方法-77-方法功能描述GridView()GridView构造函数setGravity(intgravity)设置此组件中的内容在组件中的位置setColumnWidth(int)该方法设置网格视图的宽度getAdapter()获取该视图的适配器AdaptersetAdapter(ListAdapteradapter)设置网格视图对应的适配器setStretchMode(int)该方法用于设置缩放模式,也可通过android:stretchMode设置,有多个缩放模式NO_STRETCH,STRETCH_SPACING,STRETCH_SPACING_UNIFOR或STRETCH_COLUMN_WIDTHonKeyMultiple(intkeyCode,intrepeatCount,KeyEventevent)多次按键时的处理方法。当连续发生多次按键时,该方法被调用。其中keyCode为按键对应的整型值,repeatCount是按键的次数,event是按键
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 漫画考级培训课件
- 2026年甘肃炳灵寺文物保护研究所合同制工作人员招聘备考题库带答案详解(夺分金卷)
- 2026云南临沧沧源佤族自治县勐省中心卫生院招聘村卫生室工作人员5人备考题库及答案详解(历年真题)
- 2026山东青岛市人力资源集团有限公司招聘14人备考题库带答案详解(基础题)
- 2026广西崇左凭祥市家门口就业服务站招聘6人备考题库含答案详解(模拟题)
- 2026上海师范大学第四附属中学招聘1人备考题库完整答案详解
- 2026四川成都市第三十二幼儿园招聘备考题库带答案详解(综合卷)
- 2026山东能源集团营销贸易有限公司所属企业市场化招聘15人备考题库及1套完整答案详解
- 2026上半年贵州事业单位联考上海交通大学医学院附属上海儿童医学中心贵州医院招聘16人备考题库含答案详解(模拟题)
- 2026上半年贵州事业单位联考仁怀市招聘77人备考题库带答案详解(巩固)
- 酒店总经理年终总结模版
- 2025“大唐杯”全国大学生新一代信息通信技术大赛决赛理论参考试题库(含答案)
- 课题申报书:台湾青年教师赴陆高校任教影响因素与因应策略研究:从推拉系住力模型的视角
- 五育《融合的数学文化》四年级下册
- 《幼儿良好生活习惯培养的探究》8700字(论文)
- 电子制造业安全事故预案
- 小产权房买卖合同协议
- 幼儿园中班社会活动《鸟类大罢工》课件
- 食堂食材配送采购 投标方案(技术方案)
- JJG 621-2012 液压千斤顶行业标准
- 山东省济南市2024届高三第一次模拟考试(济南一模)化学试题附参考答案(解析)
评论
0/150
提交评论