android开发教程.ppt

上传人:xt****7 文档编号:15675097 上传时间:2020-08-29 格式:PPT 页数:158 大小:6.08MB
收藏 版权申诉 举报 下载
android开发教程.ppt_第1页
第1页 / 共158页
android开发教程.ppt_第2页
第2页 / 共158页
android开发教程.ppt_第3页
第3页 / 共158页
资源描述:

《android开发教程.ppt》由会员分享,可在线阅读,更多相关《android开发教程.ppt(158页珍藏版)》请在装配图网上搜索。

1、Android开发教程,第一章 Android概述 第二章 Android开发环境搭建 第三章 Android的Hello World应用程序 第四章 Android用户界面开发 第五章 Android数据存储开发 第六章 Android开发实例,第一章 Android概述,1.1 什么是Android 1.2 Android的体系结构 1.3 Android的应用程序组件,Android的发展,Android一词的本义指“机器人”,2003年美国有一家以Android为名的小公司成立,开发手机平台。 Google在2005年收购Android之后,继续进行对Android系统开发。 Goog

2、le于2007年11月5日发布了开源的Android平台,并组建了开放手机联盟(Open Handset Alliance),包括Google、中国移动、T-Mobile、宏达电、高通、摩托罗拉等领军企业,Android的发展,在Google及其开放手机联盟推出基于Linux平台的开源手机操作系统Android之后,Google又不惜重金举办了Android开发者大赛,吸引了众多开发者的目光。因为Android不仅功能强大,而且具有开放和免费等先天优势,所以全球范围内的电信行业、手机制造商更是毫不犹豫地加入到Android开放手机联盟中来。 2008年9月22日,美国运营商T-Mobile U

3、SA在纽约正式发布了第一款基于Android操作系统的手机T-Mobile G1,这让更多的移动设备厂商看到了Android的光明前景都纷纷加入其中,甚至Android已经涉足上网本市场。中国移动也在Android的基础之上推出了自己的操作系统OMS。,Android的发展,2009年1季度 G1销售100万支 2009.3 MWC华为发布Android手机 Moto,三星,LG计划2009年下半年推出Android手机 2009 获得Orange, Vodafone, O2, Telefonica支持 2009进军上网本,Android的特点,开放性 应用程序无界限 应用程序是在平等的条件下

4、创建的 应用程序可以轻松地嵌入网络 应用程序可以并行运行,Android的特点,应用程序无界限:Android上的应用程序可以通过标准API访问核心移动设备功能。通过互联网,应用程序可以声明它们的功能可供其他应用程序使用。,Android的特点,应用程序是在平等的条件下创建的:移动设备上的应用程序可以被替换或扩展,即使是拨号程序或主屏幕这样的核心组件。,Android的特点,应用程序可以轻松地嵌入网络:应用程序可以轻松地嵌入HTML、JavaScript和样式表,应用程序还可以通过WebView显示网络内容。,1.1 什么是Android,Android是一款针对移动设备的软件堆栈,其中包括操

5、作系统(基于Linux内核)、中间件和关键应用程序。 基于Android平台的应用程序的开发,可以在Android SDK(Software Development Kit,软件开发工具包)的帮助下使用Java语言来完成。 Android SDK为我们提供了一组必要工具包和的API(Application Programming Interface,应用程序编程接口)。,1.1 什么是Android,Android采用Linux为操作系统,所以系统程序包含了C语言的标准函数库。 应用程序主要以Java语言在Dalvik VM虚拟机上执行。 应用程序开发环境以Eclipse为主,加上Androi

6、d Development Tools (ADT)插件及Android SDK。 Android平台的主旨是提供一个应用程序架构(Application Framework),好让各家OEM厂商可不必从头进行软件开发,就能推出一系列的Android平台手机。,Android通常拥有的特性,(1) Application framework:提供可重复使用及改写的组件。 (2) Dalvik virtual machine:提供给移植设备一个优化过的Java虚拟机。 (3) Integrated browser:基于开放源码的WebKit引擎的一个浏览器,像Mac上的Safari也是从WebKi

7、t衍生出来的。 (4) Optimized graphics:优化过的绘图函数库,包含了SGL的2D绘图函数库及基于OpenGL ES 1.0规范的3D绘图函数库。 (5) SQLite:一个结构化的数据库系统。,Android通常拥有的特性,(6) Media support:多媒体影音格式的支持,包含了MPEG4,H.264,MP3,AAC,AMR,JPG,PNG,GIF。 (7) GSM:GSM手机的通话能力其实必须在硬件电路层次实现,软件层次无法实现,只是Android平台要求必须要有GSM通话能力,此项功效特点与其说是特性,不如说是订立出最低的硬件要求规范。 (8) Bluetoot

8、h, EDGE, 3G, Wi-Fi, camera, GPS, compass, and accelerometer:同GSM一样,它必需由实际硬件决定是否支持。 (9) Rich development environment:包含了设备模拟器,调试工具,内存及性能评估分析工具及让Eclipse IDE支持Android项目的插件。,1.2 Android的体系结构,Android的体系结构分成(1)Applications,(2)Application Framework,(3)Libraries,(4)Android Runtime,(5)Linux Kernel五大部分。 Andro

9、id本身是一套软件堆栈(Software Stack),或称为“软件迭层架构”,迭层主要分成三层:操作系统、中间件(Middleware)、应用程序。想开发可在Android平台上运行的应用程序,可用Java程序语言编写。,1.2 Android的体系结构,Applications,Android系统自带的应用程序通常包含有电子邮件程序、短信程序、日历、地图、浏览器、通讯录程序等,所有的应用程序都由Java语言编写。,Application Framework,应用程序开发人员在编写应用程序时可以完整的使用统一的API接口。 这个应用程序框架是可以容易重复使用各种组件,这样应用程序就可以只需提

10、供出它自己本身的特殊功能。 应用程序还可以较容易的去使用其它程序的特殊功能。这种统一机制,有助于开发人员去编写自己新的软件组件,而不用编写一些已经存在的重复代码,提高开发效率。,Application Framework组件,(1) Views System(视图系统) (2) Content Providers(内容提供器) (3) Resource Manager(资源管理器) (4) Notification Manager(通知管理器) (5) Activity Manager(活动管理器),Application Framework组件,(6) Window Manager(窗口管理

11、器) (7) Location Manager(定位管理器) (8) Telephony Manager(电话管理器) (9) Package Manager(包管理器) (10) XMPP Service:eXtensible Messaging and Presence Protocol,Libraries,(1) System C library:一个由BSD衍生出来的标准C系统函数库(libc),这个函数库已针对Linux嵌入式设备进行过优化。 (2) Media Libraries:基于PacketVideos OpenCORE的多媒体函数库;这个多媒体函数库支持播放和录制许多现在很

12、流行的声音及影像格式。比如:MPEG4,H.264,MP3,AAC,AMR,JPG及PNG。 (3) Surface Manager:这个部份让开发者可以去存取显示系统,以及无接缝的实现2D/3D多应用程序之间的整合。 (4) LibWebCore:一个先进的网页浏览器引擎。 (5) SGL:2D图形引擎库。,Libraries,(6) 3D Libraries:一个基于OpenGL ES 1.0规范的3D图像引擎库。它可以选择硬件的3D加速或高度优化的3D软件程序去实现效果。 (7) Free Type:位图及矢量字形。 (8) SQLite:SQLite是一套开放源码的关系数据库,供And

13、roid上所有的应用程序使用。其特点在于轻量型(仅500KB左右的大小),适合手持式设备使用;此外桌面型计算的应用程序也有使用,如OpenOffice.org 2.0版之后就有内建的SQLite。 (9) SSL - Secure Socket Layer,专门用于保护网页通讯的协议。,Android Runtime,Android虽然使用Java程序语言来开发、编写应用程序,但却不使用一般大家目前在用的Java Runtime(J2ME)版本来执行Java程序,而是用Android自有的Android Runtime来执行。Android Runtime包含下面两个核心。 (1) Core

14、Libraries (2) Dalvik Virtual Machine,Linux Kernel,Android平台的操作系统使用的是Linux,其核心版本为2.6版 Android所用的Linux核心,包含的功能主要有:安全(Security)、内存管理(Memory Management)、进程管理(Process Management)、网络堆栈(Network Stack)、驱动程序模型(Driver Model)等 另外在前述的软件堆栈与硬件间建立起一个抽象层(Abstraction Layer)。,1.3 Android的应用程序组件,Activity Service Conte

15、ntProvider BroadcastReceiver,第二章 Android开发环境搭建,2.1 下载并安装JDK 2.2 下载并安装SDK 2.3下载并安装eclipse 2.4 下载并安装ADT,工具包关系,Android的开发环境指用于开发Android应用程序所需要的基本的开发工具,主要包括四个部分,分别是JDK、eclipse、ADT及Android SDK。,2.1 下载并安装JDK,(1) 下载最新的JDK,下载地址为:,2.1 下载并安装JDK,(2)安装JDK (3) 配置JDK,2.1 下载并安装JDK,(4) 测试JDK,2.2 下载并安装SDK,(1) 下载Andr

16、oid SDK,我们可以到下载地址,2.2 下载并安装SDK,(2) 安装Android SDK,2.2 下载并安装SDK,(3) 下载Android SDK的其他组件,2.2 下载并安装SDK,(4) 配置Android SDK,2.2 下载并安装SDK,(5) 测试Android SDK的配置,2.3下载并安装eclipse,(1) 下载eclipse,2.3下载并安装eclipse,(2)安装eclipse,2.4 下载并安装ADT,ADT是Google为Android开发者提供的Eclipse插件,可以很方便的开发应用程序,下面我们来安装和安装ADT插件,步骤如下: (1) 下载ADT

17、。我可以在找到ADT的下载链接,2.4 下载并安装ADT,(2) 安装ADT,2.4 下载并安装ADT,(3) 配置ADT,第三章Hello World应用程序,3.1 创建Hello World应用程序 3.2 应用程序结构分析 3.3 调试应用程序 3.4 导入已存在项目,3.1 创建Hello World应用程序,ADT提供了简单的生成Android应用框架的功能,我们现在使用ADT通过Eclipse创建一个Android工程。 在创建工程之前,首先要有一个运行应用程序的环境,可以是真实的Android手机,也可以是模拟器。这里使用模拟器的方式,即使用AVD来运行我们的应用程序。,什么是

18、AVD,从Android 1.5开始引入了AVD(Android Virtual Device)这个概念。 AVD是一个经过配置的模拟器。在创建AVD时可以配置的选项有:模拟器影像大小、触摸屏、轨迹球、摄像头、屏幕分辨率、键盘、GSM、GPS、Audio录放、SD卡支持、缓存区大小等。,创建AVD,下面我们便来配置Android模拟器,具体步骤如下所示。 (1) 打开“Android SDK and AVD Manager”,创建AVD,(2) 新建AVD,创建AVD,(3) 运行AVD,3.2 应用程序结构分析,“Package Explorer”导航器中的“HelloWorld”项目,R.

19、java,R.java是在建立项目时自动生成的,这个文件是只读模式,不能更改,R.java文件是定义该项目所有资源的索引文件。先来看看“HelloWorld”项目的R.java文件,AndroidManfest.xml,AndroidManfest.xml文件则包含了该项目中所使用的Activity、Service、Receiver,我们先来打开“HelloWorld”项目中的AndroidManfest.xml文件,String.xml,资源文件中一些常量的定义,main.xml,“HelloWorld”项目的布局文件(layout),布局和参数,LinearLayout android:o

20、rientation:表示这个介质的版面配置方式是从上到下垂直地排列其内部的视图。 android:orientation:表示这里是水平排列 android:layout_width:定义当前视图在屏幕上所占的宽度,fill_parent即填充整个屏幕。 android:layout_height:定义当前视图在屏幕上所占的高度,fill_parent即填充整个屏幕。 wrap_content:随着文字栏位的不同而改变这个视图的宽度或高度。 layout_weight:用于给一个线性布局中的多个视图的重要度赋值。,布局和参数,TextView android:layout_width为整个屏

21、幕的宽度 android:layout_height可以根据文字来改变高度 android:text则设置了这个TextView要显示的文字内容,这里引用了string中的hello字符串,即String.xml文件中的hello所代表的字符串资源。hello字符串的内容“Hello World, HelloWorld!”这就是我们在“HelloWorld”项目运行时看到的字符串。,HelloWorld.java,主程序HelloWorld类继承自Activity类,重写了void onCreate(Bundle savedInstanceState)方法。 在onCreate方法中通过set

22、ContentView(R.layout.main)设置了Activity要显示的布局文件(layoutmain.xml)。,结构特点,以上的应用程序结构是Android开发的特点,这样可以很轻松地将代码和UI(User Interface,用户接口;用户界面)分开,在国际化和程序维护方面有着巨大的作用。 如果Android程序需要自适应国际化,比如说多国语言等问题,那么就可以定义不同语言的UI布局,在程序装载时调用不同的布局。 而且,如果需要修改UI的一些问题,就不必查看代码了,直接更改这些布局文件即可。 当然,这需要开发者在开发时使用这种MVC框架,尽量减少使用“硬编码”。,3.3 调试应

23、用程序,在eclipse开发工具中调试程序的方法很多,但是使用eclipse调试Android程序时需要注意一些细节上的问题。 DDMS的使用 断点的使用 adb的使用,DDMS的使用,在eclipse + ADT的开发环境中没有直接跟踪对象内容的方法,但是我们可以使用Google提供的ADT插件DDMS(Dalvik Debug Monitor Service)在eclipse上轻松地调试Android程序。 DDMS为我们提供了许多功能,例如:测试设备截屏,针对特定的进程查看正在运行的线程以及堆信息,LogCat,广播状态信息,模拟电话呼叫,接收SMS,虚拟地理坐标等等 (1) 切换到DD

24、MS的方法 (2) LogCat使用 (3) File Explorer使用,切换到DDMS的方法,切换到DDMS的方法,在“DDMS”界面中选择“Devices”标签,查看其菜单的功能,我们可以看到Debug Process(调试进程)、Update Threads(更新线程)、Update Heap(更新堆)、Cause GC(引起垃圾回收)、Stop Process(停止进程)、Screen Capture(屏幕截图)、Reset adb(重启Android Debug Bridge)菜单选项,如图51所示。 Android程序运行时的各种状态,比如进程信息、线程分析、堆内存的占用,结束

25、一个进等程。当然,这些操作都是在DDMS框架下进行的,日常开发的程序是无法执行调用的。如果adb调试桥运行不稳定,可以选择“reset adb”来重新启动“adb.exe”进程。,LogCat使用,“LogCat”通过“android.util.Log”类的静态方法来查找错误和打印系统日志消息。它是一个进行日志输出的API,我们在Android程序中可以随时为某一个对象插入一个Log,然后在DDMS中观察LogCat的输出是否正常。android.util.Log常用的方法有以下5个: Log.v(String tag, String msg); Log.d(String tag, Strin

26、g msg); Log.i(String tag, String msg); Log.w(String tag, String msg); Log.e(String tag, String msg);,LogCat使用,这5种方法的首字母分别对应VERBOSE、DEBUG、INFO、WARN、ERROR。 当利用DDMS进行调试时,它们的区别并不大,只是显示的颜色不同,我们可以控制要显示的某一类错误,一般我们如果使用“断点”方式来调试程序,则使用Log.e比较合适。 但是根据规范建议Log.v,Log.d信息应当只存在于开发过程中,最终版本只可以包含Log.i,Log.w,Log.e这三种日志

27、信息。,LogCat使用,下面对“HelloWorld”程序进行调试,首先修改“HelloWorld.java”,LogCat使用,点击“Run”“Debug”菜单命令,进入调试模式,LogCat使用,切换到“DDMS”界面,在“Devices”标签中选择项目运行的AVD,并点击“LogCat”标签,File Explorer使用,File Explorer显示的是已经连接的AVD的文件及目录,通过File Explorer可以向AVD上传文件或从AVD中下载文件的本地。下面介绍文件的上传方法。 在“Devices”标签中选择已经运行的AVD,并选择“File Explorer”,打开SD卡所

28、在的目录,最后上传文件,,断点的使用,在调试Android程序时,我们同样可以通过设置断点的方式来调试程序。在启动应用程序进行调试时,eclipse会自动切换到Debug透视图。毫无疑问,最常见的调试步骤是设置断点,这样可以检查条件语句或循环内的变量和值。 要在Java透视图的Package Explorer视图中设置断点,双击选择的源代码文件,在一个编辑器中打开它。遍历代码,将鼠标放在可疑代码一行的标记栏(在编辑器区域的左侧)上,双击即可设置断点。 (2) 点击“Run”“Debug”菜单命令,切换到了“Debug”页面,这里可以对程序进行调试。,adb的使用,Android调试桥(Andr

29、oid Debug Bridge, adb)是多种用途的工具,该工具可以帮助我们管理设备(Android-powered device)或模拟器(emulator instance)的状态。 Android调试系统是一个客户/服务器系统,包括三个组成部分。 一个在你用于开发程序的电脑上运行的客户端。你可以通过shell端使用adb命令启动客户端。其他Android工具比如说ADT插件和DDMS同样可以产生adb客户端。 在你用于发的机器上作为后台进程运行的服务器。该服务器负责管理客户端与运行于模拟器或设备上的adb守护程序(daemon)之间的通信。 一个以后台进程的形式运行于模拟器或设备上的

30、守护程序(daemon)。,(1) 发出adb命令,发出Android命令:可以在我们的开发机上的命令行或脚本上发布Android命令,使用方法: adb -d|-e|-s ,(2) 查询模拟器或设备实例,在发出adb命令之前,有必要知道什么样的模拟器或设备实例与adb服务器是相连的。可以通过使用devices命令来得到一系列相关联的模拟器或设备:adb devices 作为回应,adb为每个实例都制定了相应的状态信息:,(3) 给特定的模拟器或设备实例发送命令,如果有多个模拟器或设备实例在运行,在发布adb命令时需要指定一个目标实例。这样做,需使用-s选项的命令。使用-s选项的格式是:adb

31、 -s 如上所示,给一个命令指定了目标实例,这个目标实例使用由adb分配的序列号。我们可以使用devices命令来获得运行着的模拟器或设备实例的序列号来运行命令,如图中所示,这个命令在emulator-5554上安装软件包ESFileExplorer.apk。,(4) 安装软件,我们可以使用adb从开发电脑上复制一个应用程序,并且将其安装在一个模拟器或设备实例。像这样做,使用install命令。这个install命令要求我们必须指定所要安装的.apk文件的路径:adb install ,(5) 卸载软件,卸载软件使用uninstall命令,其使用格式如下: adb uninstall 这里的p

32、ackage为安装的软件的包名,这里以我们前面的HelloWorld项目为例,包名即为“org.myandroid.HelloWorld”,当运行程序使模拟器死机时,我们也可以使用uninstall命令来强行卸载这个应用程序。,(6) 启动shell命令,db提供了shell端,通过shell端你可以在模拟器或设备上运行各种命令。这些命令以2进制的形式保存在本地的模拟器或设备的文件系统中。 不管我们是否完全进入到模拟器或设备的adb远程shell端,我们都能用shell命令来执行命令。当没有完全进入到远程shell的时候,这样使用shell命令来执行一条命令: adb -d|-e|-s she

33、ll 进入模拟器或设备的远程shell端时,这样使用shell命令: adb -d|-e|-s shell,(6) 启动shell命令,通过adb远程shell端,我们可以通过sqlite3命令程序来管理数据库。sqlite3工具包含了许多使用命令,比如:“.dump”:显示表的内容,“.schema”:可以显示出已经存在的表空间的SQL CREATE结果集。sqlite3还允许你远程执行SQL命令。,(7) 关闭adb server,在某些情况下,我们可能需要终止Android调试系统的运行,然后再重新启动它。例如,如果Android调试系统不响应命令,我们可以先终止服务器然后再重启,这样就

34、可能解决这个问题,用kill-server可以终止adb server。 可以用adb发出的任何命令来重新启动服务器。kill-server命令的使用格式如下:adb kill-server,3.4 导入已存在项目,在安装了Android开发环境之后,可以直接将Android项目导入到eclipse中。 启动eclipse,选择“File”“Import”菜单,展开“General”项,选择“Existing Projects into Workspace”导入项目到工作空间。,3.4 导入已存在项目,然后点击“Next”按钮,进入选择项目文件目录,选择好项目目录后,点击“Finish”按钮,

35、等待导入项目完成。如果需要将项目文件一起拷贝到工作空间,就需要选择“Copy projects into workspace”复选框。,第四章 Android用户界面开发,4.1 用户界面开发简介 4.2 单个Activity的用户界面示例 4.3 多个Activity的用户界面示例,4.1 用户界面开发简介,Android的用户界面可以有两种实现方式:使用XML或者是使用Java代码。 通过直接书写代码的方式来实现界面是比较麻烦的事情。举个例子来说,如果我们有DHTML的经验,那么这两者的区别可以比喻为:用XML来实现用户界面就像直接写HTML代码,而用Java代码来实现用户界面就像用Jav

36、aScript创建DOM对象来拼接页面。 所以,使用XML来布局界面应该是首选。,XML布局,Android使用一个XML文件来定义用户界面。为了方便理解,我们可以直接把它理解为一个HTML文件。事实上,它也确实比较像一个HTML文件。,XML布局,这里面有一个比较重要的类叫做ViewGroup,这个XML的root节点必须是一个ViewGroup,或者是一个单一的Widget(整个XML只有一个元素)。 Android几乎所有的UI似乎都和ViewGroup有或多或少的关系。但是它只是一个abstract class,并不能直接使用,我们能用的,是它的一些子类,例如:AbsoluteLayo

37、ut、FrameLayout、LinearLayout、RelativeLayout、TableLayout等,,XML布局,AbsoluteLayout:绝对定位的布局方式,在它内部嵌套的元素必须指定具体的位置。 FrameLayout:帧布局方式,说帧不太容易理解,可以说成是层布局方式,也就是说,在它内部的元素,是一层一层的叠加在一起的。如果用过Photoshop,或者Flash,这里面的层的概念是和他们一致的。如果最上层的元素是不透明的,并且比下面的元素尺寸要大,那么将看不到下面的元素,只能看到顶层元素。这些层的顺序是:最新声明的放到最前面。可以这样理解,Android按文件的书写顺序来

38、组织这个布局,先声明的放在第一层,再声明的放到第二层,最后声明的放在最顶层。,XML布局,LinearLayout:线性布局方式,这种布局比较常用,也比较简单,就是每个元素占一行,当然也可能声明为横向排放,也就是每个元素占一列。 RelativeLayout:相对定位的布局方式,在定位元素的位置的时候,使用相对位置,可以相对其他元素,也可以相对这个布局。就像是说:我现在站在A和B的中间;或者说,我站在队伍的中间。前者就是相对其他元素来定义位置,后者是相对整个布局来定义位置。 TableLayout:表格的布局方式,这里面的Table和HTML中的Table类似。,XML布局,从上面这几个类从名

39、字就可看的出来,他们是Layout,也就是布局。如果用过HTML,那么每一个Layout,可以理解为有了特定排版样式的DIV。在DIV的内部,可以放置其他的DIV,当然也可以放置最底层的元素,比如说文本、文本框、单选按钮、图片等等。这里面所说的最底层的元素,它们有一个超类叫做View,同时ViewGroup也是它的子类。ViewGroup就是能容纳其他View的View。,ViewGroup和View总结,(1) ViewGroup ViewGroup是一个android.view.ViewGroup(android.view.View的子类)类的对象,顾名思义,ViewGroup是一个特殊的

40、View对象,他的功能是装载和管理一组下层的View和其他的ViewGroup,ViewGroup可以为UI增加结构,并且将复杂的屏幕元素构成一个独立的实体。作为一个基类,ViewGroup为Layout(布局)服务,Layout则是一组提供屏幕界面通用类型的完全实现子类。Layout可以为一组View构建一个结构。,ViewGroup和View总结,(2) View 任何一个View对象都将继承android.view.View类。它是一个存储有屏幕上特定的一个矩形布局和内容属性的数据结构。一个View对象可以处理测距、布局、绘图、焦点变换、滚动条,以及屏幕区域自己表现的按键和手势。View

41、类为Widget服务,Widget则是一组用于绘制交互屏幕元素的完全实现子类。Widget处理自己的测距和绘图,所以可以快速地用它们素构建UI。可用到的Widget包括TextView、EditText、Button、RadioButton、CheckBox和ScrollView等。,XML布局总结,(1) 这个XML文件是由许多View嵌套组成的。 (2) 如果布局中有多个元素,那么最顶层必须是ViewGroup(一个ViewGroup对象同时也是一个View对象),不可以是View,如果整个布局只有一个元素,那么最顶层元素就是这个唯一的元素。 (3) 在ViewGroup可以内部嵌套Vie

42、w(既然可以嵌套View,就更可以嵌套ViewGroup了) (4) 在View中,不可嵌套其他东西了,要不然它就是ViewGroup了,就是这么定义的。,Hello World应用程序用户界面分析,这里将针对上一章创建的“HelloWorld”项目,对其用户界面作简要介绍。 main.xml R.java HelloWorld.java,main.xml,main.xml源码详细解释如下,这里每一种元素可以定义属性有很多,并且这些属性都可以和HTML的css中的属性来类比。 (1) 首先,定义了一个LinearLayout,前面说过,这个布局要么将子元素水平排列,要么将它们竖直排列。 (2)

43、 然后,定义了一个TextView,一个TextView,就是一块区域,用来显示文本,用这个View定义的元素只能用来显示,是不可以编辑的,如果想要可编辑的文本块,那么应该使用它的子类EditText。,R.java,这里涉及到了一些资源文件,直观的说,就是res目录下的那些目录和文件,常用的有: res/drawable/:用来存放图片文件 res/layout/:用来存放布局定义文件 res/values/:用来存放一些变量、参数等文件,R.java,这里涉及到了一些资源文件,直观的说,就是res目录下的那些目录和文件,常用的有: res/drawable/:用来存放图片文件 res/la

44、yout/:用来存放布局定义文件 res/values/:用来存放一些变量、参数等文件 这些资源文件都是独立于代码而存在的,在代码中要访问到这些资源需使用R.java文件。在Android的代码中,有一个文件比较奇怪,这个文件就是R.java,在R.java的注释部分,有这样一段话:“AUTO-GENERATE FILE. DO NOT MODIFY”,这个文件是自动生成的,不要修改。,R.java, 这个文件就是Java代码和独立于Java代码的资源文件之间的访问窗口,Java程序可以通过R.java来访问那些资源文件。 这个文件是在程序编译过程中由aapt(Android Asset Pa

45、ckaging Tool)自动生成 这个文件中的属性都是public static final的,所以可以直接在Java代码中引用,每个属性都代表一个资源,看起来就像为每个资源都定义了一个ID,然后通过这个ID来访问资源 所有的资源文件都被编译进最后生成的二进制包中,这样能够带来很高的性能和效率,HelloWorld.java,接下来再看一下,如何在Java代码中使用这个R.java。,HelloWorld.java,这其中的R.layout.main,通过setContextView(),被Java程序调用。 这段代码中引入了另外一个非常重要的概念:Activity。如果套用MVC来理解的话

46、:ViewGroup和View属于View领域的东西,Activity可以理解为Control领域的东西,虽然可以这么类比着来理解,但是Activity其实做了更多的事情,由它将View和一些数据、操作等结合在一起,完成一个相对完整的行为、活动。所以,任何View要被显示,必须通过Activity来进行。这样每个Activity都会包含特定的行为,多个Activity互相合作,最终组成一个完整的Android程序。 在示例的Activity中,有一个onCreate()方法,这个方法会在此Activity被创建的时刻调用。在方法内部,设置此Activity的视图为R.layout.main中定

47、义的视图,也就是res/layout/main.xml中定义的视图(视图、布局、GUI、UI意义相同,可统一用View表示)。,4.2 单个Activity的用户界面示例,一个简单的和用户交互的示例,这个程序的需求是: 画面上有三行元素,第一行是一个TextView,用来显示文字 第二行是一个EditText,用户将在此输入文字 第三行是一个Button 用户点击Button之后,会在第一行的TextView中显示:Hello, (用户在第二行中输入的文字)。比如说用户在输入框中输入:“UI”,那么点击Button之后,会在显示区域显示:“Hello, UI”。,4.2 单个Activity的

48、用户界面示例,要完成这个程序,首先是创建一个Android项目,这个默认创建的项目实际就是一个最基本的“HelloWorld”项目,但此时新建的项目名字命名为“HelloOneActivity”,然后是在此基础上修改与完善项目,这里大概需要用5步:,UI的设计,(1) 先完成UI的设计,修改在res/layout/目录下的main.xml的文件,UI的设计,这里解释一下这几个语句: android:id=”+id/textview_display” 这个是用来为当前的View声明一个ID,这样,在Java程序中就可以通过这个ID来找到这个元素,进而能够操作这个元素。 android:textS

49、ize=”20px” 声明字体大小为20px,对于每种View,都会有一系列的可以设置的属性,具体的属性可参考每个View的说明文档。,声明资源,(2) 创建好这个布局文件之后,再把这个文件需要的android:text=”string/sayhello”在res/values/strings.xml中声明一下。这时已经可以运行一下这个Activity,看看最终显示的效果是否和预期的一致,如果有差别,可再调整一下。,修改交互动作,第3步,现在,UI已经设计好了,修改ADT自动创建的Activity,其名字为:HelloOneActivity.java,用这个Activity来显示这个UI。,修

50、改交互动作,这里面有些语句需要解释: Button button = (Button) findViewById(R.id.button_sayhello) 这个语句中的findViewById()是一个比较简单、重要、常用并且是一直用的语句,其功能就是在当前的ContentView中按ID来找到对应的View。例如这里,通过R.id.button_sayhello,就能找到第1步提到的Button了。这里面的R.id.button_sayhello是在Build的时候,由aapt自动生成的R.java中的内容。对资源文件中的android:id=”+id/textview_display”,

51、就会在R.java中对应的生成一个ID。 button.setOnClickListener(new View.OnClickListener() 现在的GUI程序,好像都喜欢事件驱动的模型,有人这样描述过GUI系统本质:在事件驱动下动态地展现数据模型的图形系统。在这个语句中,setOnClickListener就是为button添加一个事件监听,监听OnClick事件,也就是说,如果一旦触发button的OnClick事件,就会执行后面定义的功能。,运行程序接口,(4) 运行程序,4.3 多个Activity的用户界面示例,这里将解释如何创建多个Activity的用户界面,以及了解Activ

52、ity的生命周期。这个多Activity的示例程序的功能大概是这样的: 在主页面上有三个元素:一个文本输入框,两个按钮。用户可以在文本框中输入一些字符 点击第一个按钮,将弹出一个对话框形式的Activity,显示”Hello, ” 如果点击的是第二个按钮,将显示另一个全屏的Activity,显示”Hello, ”,4.3 多个Activity的用户界面示例,(1) 创建项目。这里,项目的名字为“HelloThreeActivity”,应用程序的名字为“Activity Lifecycle”,包名为“org.myandroid.HelloThreeActivity”,默认创建的Activity的

53、名字为“ActivityLifecycle”。,4.3 多个Activity的用户界面示例,(2) 先完成UI的设计,创建布局。从程序来看,似乎有三个Activity,但是第二个和第三个几乎是相同的,于是,只创建两个布局。,main.xml内容,dialog.xml内容丰富,4.3 多个Activity的用户界面示例,(3) 然后,需要把上面提到的字符变量声明一下,修改res/values/strings.xml,4.3 多个Activity的用户界面示例,(4) 创建Activity,需要定义三个 Activity:分别将他们定义为:ActivityLifecycle(用来显示主画面)、Al

54、ertDialog(用来显示对话框)和AlertActivity(用来显示那个全屏的Activity)。 (5) 编辑AndroidManifest.xml,这个文件像一个户口簿一样记录每一个Activity的信息,Android系统会通过这个文件得到:执行这个程序的时候,启动的是那个Activity等信息。不仅如此,这个还包括Intent、Provider等其他一些信息。 (6) 这时就可以运行程序了。,生命周期的详细说明, 如果一个Activity显示在最前端,它的状态是active或者是running 如果一个Activity失去焦点,但是还能在屏幕上看到它,比如说,被一个非全屏的或者是

55、透明的另一个Activity遮盖,它此时的状态是paused。一个处于paused状态的Activity,保持着所有自身的状态和信息,秉持着与window manager的联系,但是当系统内存不足时,可能会被系统终止 如果一个Activity完全看不见了,被其他的Activity完全挡住,它的状态变成stopped。处于stopped的Activity虽然也保留着如同paused状态一样的特性,但是此时的它更容易被系统终止 如果一个Activity处于paused或者stopped状态时,系统可以通过要求Activity结束或者强制kill的方式从内存中删除这个Activity,当它在此需要显

56、示时,就需要restart和重新加载以前的数据,可见,适时的保存数据的重要性,Android应用的生命周期,第五章 Android数据存储开发,5.1 SharedPreferences 5.2 Files 5.3 SQLite 5.4 Network 5.5 ContentProvider,数据存储开发概述,在Android中,可供选择的存储方式主要有5种,分别是SharedPreferences、Files(文件)、SQLite(SQLite数据库)、Network(网络)和ContentProvider(内容提供器)。 Shared Preferences,类似于我们常用的ini文件,用

57、来保存应用程序的一些属性设置,在Android平台常用于存储较简单的参数设置。数据存放在目录:/data/data/ /shared_prefs/中,存储成XML格式的文件。我们无法在多个应用程序间共享Preferences数据。 Files(文件存取I/O),文件用来存储大数量的数据采用java.io.*库所提供有I/O接口,读写文件。只有本地文件可以被访问。优点是可以存储大容量的数据,其缺点是文件更新或是格式改变可能会导致巨大的编程工作。,数据存储开发概述, SQLite(SQLite数据库),SQLite是一个开源的轻量级关系型数据库,具有ACID(指数据库事务正确执行的四个基本要素的缩

58、写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)的特性。其体积大小只用几千字节,部分的支持一些SQL的指令,例如:ALTER、TABLE等。Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作(这些操作简称为CRUD)。 Network(网络),Android还提供了网络存储数据的方式,需要要使用两个包:.*和.*。其实就是与网络服务器取得联系,将

59、数据存放于网络服务器上或从网络服务器读取数据。,数据存储开发概述, ContentProvider,ContentProvider是所有应用程序之间数据存储和检索的一个桥梁,它的作用就是使得各个应用程序之间实现数据共享。Android为常见的一些数据提供了ContentProvider(包括音频、视频、图片和通讯录)。每个ContentProvider都会对外提供一个公共的URI(包装成Uri对象),如果应用程序有数据需要共享时,就需要使用ContentProvider为这些数据定义一个URI,然后其他的应用程序就可以通过ContentProvider传入这个URI来对数据进行操作。URI由3

60、个部分组成:content:/、数据的路径、标识ID(可选)。,5.1 SharedPreferences,首先介绍的是SharedPreferences,它是Android提供用来存储一些简单的配置信息的一种机制,例如,一些默认欢迎语、登录的用户名和密码等。其以键值对的方式存储,使得我们可以很方便的读取和存入,下面是一个示例,其功能是保存文本框中的数据,这里的用户名和密码。 (1) 新建Android项目“HelloSharedPreferences”。 (2) 修改其布局文件main.xml。在一个LinearLayout当中放3个TextView和两个EditView组件。,5.1 Sh

61、aredPreferences,(3) 修改HelloSharedPreferences.java,使得应用程序退出时,自动保存上面文件框中的内容。 在onCreate中使用findViewById得到两个EditView后,使用getSharedPreferences取得SharedPreferences对象settings,然后使用getString取得其中保存的值,最后使用setText将其值设置为两个EditText的值。 而在程序运行onStop过程,也就是在程序退出时,首先使用getSharedPreferences得到settings;然后调用edit()方法使其处于可以编辑状态

62、,并使用putString将两个EditText中的值保存起来;最后使用commit()方法提交即可保存。,5.1 SharedPreferences,(4) 运行程序。,5.2 Files,和传统的Java中实现I/O的程序类似,在Android中,其提供了openFileInput和openFileOuput方法读取设备上的文件,下面是一个示例程序,其功能是将文本框中输入的内容存入在文件中去。 (1) 创建“HelloFiles”项目。 (2) 修改布局文件main.xml。 (3) 在 strings.xml中增加上面用的资源。 (4) 最后就是增加按钮按下时,把文本框中的内容存入文件t

63、est.txt中的处理事件,在HelloFiles.java中增加内容。,5.2 Files,(5) 运行程序,当点下“Save to file”时,可在Android系统中的“/data/data/PACKAGE_NAME/files”目录下看到应用程序创建的text.txt文件。,5.3 SQLite,SQLite是Android所带的一个标准的数据库,它支持SQL语句,它是一个轻量级的嵌入式数据库。这里以一个示例来说明在Android中对数据库操作过程,在这个例子中,主要的内容有如何新建一个数据库;如何新建数据库里边的数据表;如何删除数据库里边的数据表;如何在数据表中添加新数据;如何删除

64、数据库表中的数据等。,5.3 SQLite,在进行数据库开发之前,需要了解什么是SQLiteDatabase及SQLiteOpenHelper。 SQLiteDatabase,一个SQLiteDatabase的实例代表了一个SQLite的数据库,通过SQLiteDatabase实例的一些方法,我们可以执行SQL语句,对数据库进行增、删、查、改的操作。需要注意的是,数据库对于一个应用来说是私有的,并且在一个应用当中,数据库的名字也是惟一的。,5.3 SQLite,SQLiteOpenHelper,根据这名字,我们可以看出这个类是一个辅助类。这个类主要生成一个数据库,并对数据库的版本进行管理。当在

65、程序当中调用这个类的方法getWritableDatabase()或者getReadableDatabase()方法的时候,如果当时没有数据,那么Android系统就会自动生成一个数据库。SQLiteOpenHelper是一个抽象类,我们通常需要继承它,并且实现里边的3个函数,具体函数如下所示。 onCreate(SQLiteDatabase):在数据库第一次生成的时候会调用这个方法,一般我们在这个方法里边生成数据库表。 onUpgrade(SQLiteDatabase, int, int):当数据库需要升级的时候,Android系统会主动的调用这个方法。一般我们在这个方法里边删除数据表,并建

66、立新的数据表,当然是否还需要做其他的操作,完全取决于应用的需求。 onOpen(SQLiteDatabase):这是当打开数据库时的回调函数,一般也不会用到。,5.3 SQLite,(1) 创建项目“HelloSQLite”项目。 (2) 修改布局文件main.xml 这个界面的布局信息都在main.xml文件中,在一个LinearLayout当中数值排列了5个Button,对应功能可参见项目表代码。 (3) 我们在HelloSQLite.java文件中看到内部类DatabaseHelper 。 DatabaseHelper类继承SQLiteOpenHelper,并且重写了onCreate和onUpgrade方法。在onCreate()方法里边首先我们构造一条SQL语句,然后调用db.execSQL(sql)执行SQL语句。这条SQL语句为我们生成了一张数据库表。目前我们还不需要升级数据库,所以我们在onUpgrade()函数里边没有执行任何操作。,5.3 SQLite,(4) 插入记录操作。 我们单击插入两条记录的按钮,如果数据成功插入到数据库当中的diary表

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

最新文档

  • (精品)如何发SCI.
  • 语文教学中的德育
  • 生化CH23脂质代谢
  • 相关分析和回归分析(2)
  • 有机化合物的结构
  • 气道粘液高分泌的诊治
  • 饮用水卫生监督协管工作培训
  • 糖尿病的分子机制(病理班)
  • 老年人健康与慢性病管理
  • 微机原理及第三章
  • 社会调查研究方法2章
  • 细胞分化、癌变、衰老、凋亡(终结版)
  • 智慧园区IBMS可视化管理系统建设方案课件
  • 颈椎病诊疗及康复锻炼
  • 有效沟通(需改)
点击下载此资源

相关资源

更多
正为您匹配相似的精品文档
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!

深圳坪山网站建设公司网站优化的常用方法天下网seo网站的自然优化多ip优化网站南充专业网站优化新乡优化网站排名报价单商丘网站优化推广费用多少肇庆网站优化多少钱四川大企业网站优化濮阳家装行业网站优化推广可靠吗网站做优化优选火3星顶尖网站优化推广的重要性东莞怎样优化网站台州网站的优化邯郸馆陶网站优化推广东至网站优化费用多少松江区搜索引擎网站优化头部优化网站有哪些罗湖推广网站优化哪个好贷款网站诊断分析优化报告网站SEO优化入门教程闵行区官方网站优化哪家好潮州专业的免费网站优化南通网站优化服务商网站响应时间优化优化公司网站排名网站优化中易营销网站如何做好优化工作郑州网站优化建设网站打开较慢怎么优化香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

深圳坪山网站建设公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化