android开发教程.ppt_第1页
android开发教程.ppt_第2页
android开发教程.ppt_第3页
android开发教程.ppt_第4页
android开发教程.ppt_第5页
已阅读5页,还剩153页未读 继续免费阅读

下载本文档

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

文档简介

Android开发教程 第一章Android概述第二章Android开发环境搭建第三章Android的HelloWorld应用程序第四章Android用户界面开发第五章Android数据存储开发第六章Android开发实例 第一章Android概述 1 1什么是Android1 2Android的体系结构1 3Android的应用程序组件 Android的发展 Android一词的本义指 机器人 2003年美国有一家以Android为名的小公司成立 开发手机平台 Google在2005年收购Android之后 继续进行对Android系统开发 Google于2007年11月5日发布了开源的Android平台 并组建了开放手机联盟 OpenHandsetAlliance 包括Google 中国移动 T Mobile 宏达电 高通 摩托罗拉等领军企业 Android的发展 在Google及其开放手机联盟推出基于Linux平台的开源手机操作系统Android之后 Google又不惜重金举办了Android开发者大赛 吸引了众多开发者的目光 因为Android不仅功能强大 而且具有开放和免费等先天优势 所以全球范围内的电信行业 手机制造商更是毫不犹豫地加入到Android开放手机联盟中来 2008年9月22日 美国运营商T MobileUSA在纽约正式发布了第一款基于Android操作系统的手机 T MobileG1 这让更多的移动设备厂商看到了Android的光明前景都纷纷加入其中 甚至Android已经涉足上网本市场 中国移动也在Android的基础之上推出了自己的操作系统OMS Android的发展 2009年1季度G1销售100万支2009 3MWC华为发布Android手机Moto 三星 LG计划2009年下半年推出Android手机2009获得Orange Vodafone O2 Telefonica支持2009进军上网本 Android的特点 开放性应用程序无界限应用程序是在平等的条件下创建的应用程序可以轻松地嵌入网络应用程序可以并行运行 Android的特点 应用程序无界限 Android上的应用程序可以通过标准API访问核心移动设备功能 通过互联网 应用程序可以声明它们的功能可供其他应用程序使用 Android的特点 应用程序是在平等的条件下创建的 移动设备上的应用程序可以被替换或扩展 即使是拨号程序或主屏幕这样的核心组件 Android的特点 应用程序可以轻松地嵌入网络 应用程序可以轻松地嵌入HTML JavaScript和样式表 应用程序还可以通过WebView显示网络内容 1 1什么是Android Android是一款针对移动设备的软件堆栈 其中包括操作系统 基于Linux内核 中间件和关键应用程序 基于Android平台的应用程序的开发 可以在AndroidSDK SoftwareDevelopmentKit 软件开发工具包 的帮助下使用Java语言来完成 AndroidSDK为我们提供了一组必要工具包和的API ApplicationProgrammingInterface 应用程序编程接口 1 1什么是Android Android采用Linux为操作系统 所以系统程序包含了C语言的标准函数库 应用程序主要以Java语言在DalvikVM虚拟机上执行 应用程序开发环境以Eclipse为主 加上AndroidDevelopmentTools ADT 插件及AndroidSDK Android平台的主旨是提供一个应用程序架构 ApplicationFramework 好让各家OEM厂商可不必从头进行软件开发 就能推出一系列的Android平台手机 Android通常拥有的特性 1 Applicationframework 提供可重复使用及改写的组件 2 Dalvikvirtualmachine 提供给移植设备一个优化过的Java虚拟机 3 Integratedbrowser 基于开放源码的WebKit引擎的一个浏览器 像Mac上的Safari也是从WebKit衍生出来的 4 Optimizedgraphics 优化过的绘图函数库 包含了SGL的2D绘图函数库及基于OpenGLES1 0规范的3D绘图函数库 5 SQLite 一个结构化的数据库系统 Android通常拥有的特性 6 Mediasupport 多媒体影音格式的支持 包含了MPEG4 H 264 MP3 AAC AMR JPG PNG GIF 7 GSM GSM手机的通话能力其实必须在硬件电路层次实现 软件层次无法实现 只是Android平台要求必须要有GSM通话能力 此项功效特点与其说是特性 不如说是订立出最低的硬件要求规范 8 Bluetooth EDGE 3G Wi Fi camera GPS compass andaccelerometer 同GSM一样 它必需由实际硬件决定是否支持 9 Richdevelopmentenvironment 包含了设备模拟器 调试工具 内存及性能评估分析工具及让EclipseIDE支持Android项目的插件 1 2Android的体系结构 Android的体系结构分成 1 Applications 2 ApplicationFramework 3 Libraries 4 AndroidRuntime 5 LinuxKernel五大部分 Android本身是一套软件堆栈 SoftwareStack 或称为 软件迭层架构 迭层主要分成三层 操作系统 中间件 Middleware 应用程序 想开发可在Android平台上运行的应用程序 可用Java程序语言编写 1 2Android的体系结构 Applications Android系统自带的应用程序通常包含有电子邮件程序 短信程序 日历 地图 浏览器 通讯录程序等 所有的应用程序都由Java语言编写 ApplicationFramework 应用程序开发人员在编写应用程序时可以完整的使用统一的API接口 这个应用程序框架是可以容易重复使用各种组件 这样应用程序就可以只需提供出它自己本身的特殊功能 应用程序还可以较容易的去使用其它程序的特殊功能 这种统一机制 有助于开发人员去编写自己新的软件组件 而不用编写一些已经存在的重复代码 提高开发效率 ApplicationFramework组件 1 ViewsSystem 视图系统 2 ContentProviders 内容提供器 3 ResourceManager 资源管理器 4 NotificationManager 通知管理器 5 ActivityManager 活动管理器 ApplicationFramework组件 6 WindowManager 窗口管理器 7 LocationManager 定位管理器 8 TelephonyManager 电话管理器 9 PackageManager 包管理器 10 XMPPService eXtensibleMessagingandPresenceProtocol Libraries 1 SystemClibrary 一个由BSD衍生出来的标准C系统函数库 libc 这个函数库已针对Linux嵌入式设备进行过优化 2 MediaLibraries 基于PacketVideo sOpenCORE的多媒体函数库 这个多媒体函数库支持播放和录制许多现在很流行的声音及影像格式 比如 MPEG4 H 264 MP3 AAC AMR JPG及PNG 3 SurfaceManager 这个部份让开发者可以去存取显示系统 以及无接缝的实现2D 3D多应用程序之间的整合 4 LibWebCore 一个先进的网页浏览器引擎 5 SGL 2D图形引擎库 Libraries 6 3DLibraries 一个基于OpenGLES1 0规范的3D图像引擎库 它可以选择硬件的3D加速或高度优化的3D软件程序去实现效果 7 FreeType 位图及矢量字形 8 SQLite SQLite是一套开放源码的关系数据库 供Android上所有的应用程序使用 其特点在于轻量型 仅500KB左右的大小 适合手持式设备使用 此外桌面型计算的应用程序也有使用 如OpenOffice org2 0版之后就有内建的SQLite 9 SSL SecureSocketLayer 专门用于保护网页通讯的协议 AndroidRuntime Android虽然使用Java程序语言来开发 编写应用程序 但却不使用一般大家目前在用的JavaRuntime J2ME 版本来执行Java程序 而是用Android自有的AndroidRuntime来执行 AndroidRuntime包含下面两个核心 1 CoreLibraries 2 DalvikVirtualMachine LinuxKernel Android平台的操作系统使用的是Linux 其核心版本为2 6版Android所用的Linux核心 包含的功能主要有 安全 Security 内存管理 MemoryManagement 进程管理 ProcessManagement 网络堆栈 NetworkStack 驱动程序模型 DriverModel 等另外在前述的软件堆栈与硬件间建立起一个抽象层 AbstractionLayer 1 3Android的应用程序组件 ActivityServiceContentProviderBroadcastReceiver 第二章Android开发环境搭建 2 1下载并安装JDK2 2下载并安装SDK2 3下载并安装eclipse2 4下载并安装ADT 工具包关系 Android的开发环境指用于开发Android应用程序所需要的基本的开发工具 主要包括四个部分 分别是JDK eclipse ADT及AndroidSDK 2 1下载并安装JDK 1 下载最新的JDK 下载地址为 2 1下载并安装JDK 2 安装JDK 3 配置JDK 2 1下载并安装JDK 4 测试JDK 2 2下载并安装SDK 1 下载AndroidSDK 我们可以到下载地址 2 2下载并安装SDK 2 安装AndroidSDK 2 2下载并安装SDK 3 下载AndroidSDK的其他组件 2 2下载并安装SDK 4 配置AndroidSDK 2 2下载并安装SDK 5 测试AndroidSDK的配置 2 3下载并安装eclipse 1 下载eclipse 2 3下载并安装eclipse 2 安装eclipse 2 4下载并安装ADT ADT是Google为Android开发者提供的Eclipse插件 可以很方便的开发应用程序 下面我们来安装和安装ADT插件 步骤如下 1 下载ADT 我可以在找到ADT的下载链接 2 4下载并安装ADT 2 安装ADT 2 4下载并安装ADT 3 配置ADT 第三章HelloWorld应用程序 3 1创建HelloWorld应用程序3 2应用程序结构分析3 3调试应用程序3 4导入已存在项目 3 1创建HelloWorld应用程序 ADT提供了简单的生成Android应用框架的功能 我们现在使用ADT通过Eclipse创建一个Android工程 在创建工程之前 首先要有一个运行应用程序的环境 可以是真实的Android手机 也可以是模拟器 这里使用模拟器的方式 即使用AVD来运行我们的应用程序 什么是AVD 从Android1 5开始引入了AVD AndroidVirtualDevice 这个概念 AVD是一个经过配置的模拟器 在创建AVD时可以配置的选项有 模拟器影像大小 触摸屏 轨迹球 摄像头 屏幕分辨率 键盘 GSM GPS Audio录放 SD卡支持 缓存区大小等 创建AVD 下面我们便来配置Android模拟器 具体步骤如下所示 1 打开 AndroidSDKandAVDManager 创建AVD 2 新建AVD 创建AVD 3 运行AVD 3 2应用程序结构分析 PackageExplorer 导航器中的 HelloWorld 项目 R java R java是在建立项目时自动生成的 这个文件是只读模式 不能更改 R java文件是定义该项目所有资源的索引文件 先来看看 HelloWorld 项目的R java文件 AndroidManfest xml AndroidManfest xml文件则包含了该项目中所使用的Activity Service Receiver 我们先来打开 HelloWorld 项目中的AndroidManfest xml文件 String xml 资源文件中一些常量的定义 main xml HelloWorld 项目的布局文件 layout 布局和参数 LinearLayoutandroid orientation 表示这个介质的版面配置方式是从上到下垂直地排列其内部的视图 android orientation 表示这里是水平排列android layout width 定义当前视图在屏幕上所占的宽度 fill parent即填充整个屏幕 android layout height 定义当前视图在屏幕上所占的高度 fill parent即填充整个屏幕 wrap content 随着文字栏位的不同而改变这个视图的宽度或高度 layout weight 用于给一个线性布局中的多个视图的重要度赋值 布局和参数 TextViewandroid layout width为整个屏幕的宽度android layout height可以根据文字来改变高度android text则设置了这个TextView要显示的文字内容 这里引用了 string中的hello字符串 即String xml文件中的hello所代表的字符串资源 hello字符串的内容 HelloWorld HelloWorld 这就是我们在 HelloWorld 项目运行时看到的字符串 HelloWorld java 主程序HelloWorld类继承自Activity类 重写了voidonCreate BundlesavedInstanceState 方法 在onCreate方法中通过setContentView R layout main 设置了Activity要显示的布局文件 layout main xml 结构特点 以上的应用程序结构是Android开发的特点 这样可以很轻松地将代码和UI UserInterface 用户接口 用户界面 分开 在国际化和程序维护方面有着巨大的作用 如果Android程序需要自适应国际化 比如说多国语言等问题 那么就可以定义不同语言的UI布局 在程序装载时调用不同的布局 而且 如果需要修改UI的一些问题 就不必查看代码了 直接更改这些布局文件即可 当然 这需要开发者在开发时使用这种MVC框架 尽量减少使用 硬编码 3 3调试应用程序 在eclipse开发工具中调试程序的方法很多 但是使用eclipse调试Android程序时需要注意一些细节上的问题 DDMS的使用断点的使用adb的使用 DDMS的使用 在eclipse ADT的开发环境中没有直接跟踪对象内容的方法 但是我们可以使用Google提供的ADT插件DDMS DalvikDebugMonitorService 在eclipse上轻松地调试Android程序 DDMS为我们提供了许多功能 例如 测试设备截屏 针对特定的进程查看正在运行的线程以及堆信息 LogCat 广播状态信息 模拟电话呼叫 接收SMS 虚拟地理坐标等等 1 切换到DDMS的方法 2 LogCat使用 3 FileExplorer使用 切换到DDMS的方法 切换到DDMS的方法 在 DDMS 界面中选择 Devices 标签 查看其菜单的功能 我们可以看到DebugProcess 调试进程 UpdateThreads 更新线程 UpdateHeap 更新堆 CauseGC 引起垃圾回收 StopProcess 停止进程 ScreenCapture 屏幕截图 Resetadb 重启AndroidDebugBridge 菜单选项 如图51所示 Android程序运行时的各种状态 比如进程信息 线程分析 堆内存的占用 结束一个进等程 当然 这些操作都是在DDMS框架下进行的 日常开发的程序是无法执行调用的 如果adb调试桥运行不稳定 可以选择 resetadb 来重新启动 adb exe 进程 LogCat使用 LogCat 通过 android util Log 类的静态方法来查找错误和打印系统日志消息 它是一个进行日志输出的API 我们在Android程序中可以随时为某一个对象插入一个Log 然后在DDMS中观察LogCat的输出是否正常 android util Log常用的方法有以下5个 Log v Stringtag Stringmsg Log d Stringtag Stringmsg Log i Stringtag Stringmsg Log w Stringtag Stringmsg Log e Stringtag Stringmsg LogCat使用 这5种方法的首字母分别对应VERBOSE DEBUG INFO WARN ERROR 当利用DDMS进行调试时 它们的区别并不大 只是显示的颜色不同 我们可以控制要显示的某一类错误 一般我们如果使用 断点 方式来调试程序 则使用Log e比较合适 但是根据规范建议Log v Log d信息应当只存在于开发过程中 最终版本只可以包含Log i Log w Log e这三种日志信息 LogCat使用 下面对 HelloWorld 程序进行调试 首先修改 HelloWorld java LogCat使用 点击 Run Debug 菜单命令 进入调试模式 LogCat使用 切换到 DDMS 界面 在 Devices 标签中选择项目运行的AVD 并点击 LogCat 标签 FileExplorer使用 FileExplorer显示的是已经连接的AVD的文件及目录 通过FileExplorer可以向AVD上传文件或从AVD中下载文件的本地 下面介绍文件的上传方法 在 Devices 标签中选择已经运行的AVD 并选择 FileExplorer 打开SD卡所在的目录 最后上传文件 断点的使用 在调试Android程序时 我们同样可以通过设置断点的方式来调试程序 在启动应用程序进行调试时 eclipse会自动切换到Debug透视图 毫无疑问 最常见的调试步骤是设置断点 这样可以检查条件语句或循环内的变量和值 要在Java透视图的PackageExplorer视图中设置断点 双击选择的源代码文件 在一个编辑器中打开它 遍历代码 将鼠标放在可疑代码一行的标记栏 在编辑器区域的左侧 上 双击即可设置断点 2 点击 Run Debug 菜单命令 切换到了 Debug 页面 这里可以对程序进行调试 adb的使用 Android调试桥 AndroidDebugBridge adb 是多种用途的工具 该工具可以帮助我们管理设备 Android powereddevice 或模拟器 emulatorinstance 的状态 Android调试系统是一个客户 服务器系统 包括三个组成部分 一个在你用于开发程序的电脑上运行的客户端 你可以通过shell端使用adb命令启动客户端 其他Android工具比如说ADT插件和DDMS同样可以产生adb客户端 在你用于发的机器上作为后台进程运行的服务器 该服务器负责管理客户端与运行于模拟器或设备上的adb守护程序 daemon 之间的通信 一个以后台进程的形式运行于模拟器或设备上的守护程序 daemon 1 发出adb命令 发出Android命令 可以在我们的开发机上的命令行或脚本上发布Android命令 使用方法 adb d e s 2 查询模拟器或设备实例 在发出adb命令之前 有必要知道什么样的模拟器或设备实例与adb服务器是相连的 可以通过使用devices命令来得到一系列相关联的模拟器或设备 adbdevices作为回应 adb为每个实例都制定了相应的状态信息 3 给特定的模拟器或设备实例发送命令 如果有多个模拟器或设备实例在运行 在发布adb命令时需要指定一个目标实例 这样做 需使用 s选项的命令 使用 s选项的格式是 adb s如上所示 给一个命令指定了目标实例 这个目标实例使用由adb分配的序列号 我们可以使用devices命令来获得运行着的模拟器或设备实例的序列号来运行命令 如图中所示 这个命令在emulator 5554上安装软件包ESFileExplorer apk 4 安装软件 我们可以使用adb从开发电脑上复制一个应用程序 并且将其安装在一个模拟器或设备实例 像这样做 使用install命令 这个install命令要求我们必须指定所要安装的 apk文件的路径 adbinstall 5 卸载软件 卸载软件使用uninstall命令 其使用格式如下 adbuninstall这里的package为安装的软件的包名 这里以我们前面的HelloWorld项目为例 包名即为 org myandroid HelloWorld 当运行程序使模拟器死机时 我们也可以使用uninstall命令来强行卸载这个应用程序 6 启动shell命令 db提供了shell端 通过shell端你可以在模拟器或设备上运行各种命令 这些命令以2进制的形式保存在本地的模拟器或设备的文件系统中 不管我们是否完全进入到模拟器或设备的adb远程shell端 我们都能用shell命令来执行命令 当没有完全进入到远程shell的时候 这样使用shell命令来执行一条命令 adb d e s shell进入模拟器或设备的远程shell端时 这样使用shell命令 adb d e s shell 6 启动shell命令 通过adb远程shell端 我们可以通过sqlite3命令程序来管理数据库 sqlite3工具包含了许多使用命令 比如 dump 显示表的内容 schema 可以显示出已经存在的表空间的SQLCREATE结果集 sqlite3还允许你远程执行SQL命令 7 关闭adbserver 在某些情况下 我们可能需要终止Android调试系统的运行 然后再重新启动它 例如 如果Android调试系统不响应命令 我们可以先终止服务器然后再重启 这样就可能解决这个问题 用kill server可以终止adbserver 可以用adb发出的任何命令来重新启动服务器 kill server命令的使用格式如下 adbkill server 3 4导入已存在项目 在安装了Android开发环境之后 可以直接将Android项目导入到eclipse中 启动eclipse 选择 File Import 菜单 展开 General 项 选择 ExistingProjectsintoWorkspace 导入项目到工作空间 3 4导入已存在项目 然后点击 Next 按钮 进入选择项目文件目录 选择好项目目录后 点击 Finish 按钮 等待导入项目完成 如果需要将项目文件一起拷贝到工作空间 就需要选择 Copyprojectsintoworkspace 复选框 第四章Android用户界面开发 4 1用户界面开发简介4 2单个Activity的用户界面示例4 3多个Activity的用户界面示例 4 1用户界面开发简介 Android的用户界面可以有两种实现方式 使用XML或者是使用Java代码 通过直接书写代码的方式来实现界面是比较麻烦的事情 举个例子来说 如果我们有DHTML的经验 那么这两者的区别可以比喻为 用XML来实现用户界面就像直接写HTML代码 而用Java代码来实现用户界面就像用JavaScript创建DOM对象来拼接页面 所以 使用XML来布局界面应该是首选 XML布局 Android使用一个XML文件来定义用户界面 为了方便理解 我们可以直接把它理解为一个HTML文件 事实上 它也确实比较像一个HTML文件 XML布局 这里面有一个比较重要的类叫做ViewGroup 这个XML的root节点必须是一个ViewGroup 或者是一个单一的Widget 整个XML只有一个元素 Android几乎所有的UI似乎都和ViewGroup有或多或少的关系 但是它只是一个abstractclass 并不能直接使用 我们能用的 是它的一些子类 例如 AbsoluteLayout FrameLayout LinearLayout RelativeLayout TableLayout等 XML布局 AbsoluteLayout 绝对定位的布局方式 在它内部嵌套的元素必须指定具体的位置 FrameLayout 帧布局方式 说帧不太容易理解 可以说成是层布局方式 也就是说 在它内部的元素 是一层一层的叠加在一起的 如果用过Photoshop 或者Flash 这里面的层的概念是和他们一致的 如果最上层的元素是不透明的 并且比下面的元素尺寸要大 那么将看不到下面的元素 只能看到顶层元素 这些层的顺序是 最新声明的放到最前面 可以这样理解 Android按文件的书写顺序来组织这个布局 先声明的放在第一层 再声明的放到第二层 最后声明的放在最顶层 XML布局 LinearLayout 线性布局方式 这种布局比较常用 也比较简单 就是每个元素占一行 当然也可能声明为横向排放 也就是每个元素占一列 RelativeLayout 相对定位的布局方式 在定位元素的位置的时候 使用相对位置 可以相对其他元素 也可以相对这个布局 就像是说 我现在站在A和B的中间 或者说 我站在队伍的中间 前者就是相对其他元素来定义位置 后者是相对整个布局来定义位置 TableLayout 表格的布局方式 这里面的Table和HTML中的Table类似 XML布局 从上面这几个类从名字就可看的出来 他们是Layout 也就是布局 如果用过HTML 那么每一个Layout 可以理解为有了特定排版样式的DIV 在DIV的内部 可以放置其他的DIV 当然也可以放置最底层的元素 比如说文本 文本框 单选按钮 图片等等 这里面所说的最底层的元素 它们有一个超类叫做View 同时ViewGroup也是它的子类 ViewGroup就是能容纳其他View的View ViewGroup和View总结 1 ViewGroupViewGroup是一个android view ViewGroup android view View的子类 类的对象 顾名思义 ViewGroup是一个特殊的View对象 他的功能是装载和管理一组下层的View和其他的ViewGroup ViewGroup可以为UI增加结构 并且将复杂的屏幕元素构成一个独立的实体 作为一个基类 ViewGroup为Layout 布局 服务 Layout则是一组提供屏幕界面通用类型的完全实现子类 Layout可以为一组View构建一个结构 ViewGroup和View总结 2 View任何一个View对象都将继承android view View类 它是一个存储有屏幕上特定的一个矩形布局和内容属性的数据结构 一个View对象可以处理测距 布局 绘图 焦点变换 滚动条 以及屏幕区域自己表现的按键和手势 View类为Widget服务 Widget则是一组用于绘制交互屏幕元素的完全实现子类 Widget处理自己的测距和绘图 所以可以快速地用它们素构建UI 可用到的Widget包括TextView EditText Button RadioButton CheckBox和ScrollView等 XML布局总结 1 这个XML文件是由许多View嵌套组成的 2 如果布局中有多个元素 那么最顶层必须是ViewGroup 一个ViewGroup对象同时也是一个View对象 不可以是View 如果整个布局只有一个元素 那么最顶层元素就是这个唯一的元素 3 在ViewGroup可以内部嵌套View 既然可以嵌套View 就更可以嵌套ViewGroup了 4 在View中 不可嵌套其他东西了 要不然它就是ViewGroup了 就是这么定义的 HelloWorld应用程序用户界面分析 这里将针对上一章创建的 HelloWorld 项目 对其用户界面作简要介绍 main xmlR javaHelloWorld java main xml main xml源码详细解释如下 这里每一种元素可以定义属性有很多 并且这些属性都可以和HTML的css中的属性来类比 1 首先 定义了一个LinearLayout 前面说过 这个布局要么将子元素水平排列 要么将它们竖直排列 2 然后 定义了一个TextView 一个TextView 就是一块区域 用来显示文本 用这个View定义的元素只能用来显示 是不可以编辑的 如果想要可编辑的文本块 那么应该使用它的子类EditText R java 这里涉及到了一些资源文件 直观的说 就是res目录下的那些目录和文件 常用的有 res drawable 用来存放图片文件 res layout 用来存放布局定义文件 res values 用来存放一些变量 参数等文件 R java 这里涉及到了一些资源文件 直观的说 就是res目录下的那些目录和文件 常用的有 res drawable 用来存放图片文件 res layout 用来存放布局定义文件 res values 用来存放一些变量 参数等文件这些资源文件都是独立于代码而存在的 在代码中要访问到这些资源需使用R java文件 在Android的代码中 有一个文件比较奇怪 这个文件就是R java 在R java的注释部分 有这样一段话 AUTO GENERATEFILE DONOTMODIFY 这个文件是自动生成的 不要修改 R java 这个文件就是Java代码和独立于Java代码的资源文件之间的访问窗口 Java程序可以通过R java来访问那些资源文件 这个文件是在程序编译过程中由aapt AndroidAssetPackagingTool 自动生成 这个文件中的属性都是publicstaticfinal的 所以可以直接在Java代码中引用 每个属性都代表一个资源 看起来就像为每个资源都定义了一个ID 然后通过这个ID来访问资源 所有的资源文件都被编译进最后生成的二进制包中 这样能够带来很高的性能和效率 HelloWorld java 接下来再看一下 如何在Java代码中使用这个R java HelloWorld java 这其中的R layout main 通过setContextView 被Java程序调用 这段代码中引入了另外一个非常重要的概念 Activity 如果套用MVC来理解的话 ViewGroup和View属于View领域的东西 Activity可以理解为Control领域的东西 虽然可以这么类比着来理解 但是Activity其实做了更多的事情 由它将View和一些数据 操作等结合在一起 完成一个相对完整的行为 活动 所以 任何View要被显示 必须通过Activity来进行 这样每个Activity都会包含特定的行为 多个Activity互相合作 最终组成一个完整的Android程序 在示例的Activity中 有一个onCreate 方法 这个方法会在此Activity被创建的时刻调用 在方法内部 设置此Activity的视图为R layout main中定义的视图 也就是res layout main xml中定义的视图 视图 布局 GUI UI意义相同 可统一用View表示 4 2单个Activity的用户界面示例 一个简单的和用户交互的示例 这个程序的需求是 画面上有三行元素 第一行是一个TextView 用来显示文字 第二行是一个EditText 用户将在此输入文字 第三行是一个Button 用户点击Button之后 会在第一行的TextView中显示 Hello 用户在第二行中输入的文字 比如说用户在输入框中输入 UI 那么点击Button之后 会在显示区域显示 Hello UI 4 2单个Activity的用户界面示例 要完成这个程序 首先是创建一个Android项目 这个默认创建的项目实际就是一个最基本的 HelloWorld 项目 但此时新建的项目名字命名为 HelloOneActivity 然后是在此基础上修改与完善项目 这里大概需要用5步 UI的设计 1 先完成UI的设计 修改在res layout 目录下的main xml的文件 UI的设计 这里解释一下这几个语句 android id id textview display 这个是用来为当前的View声明一个ID 这样 在Java程序中就可以通过这个ID来找到这个元素 进而能够操作这个元素 android textSize 20px 声明字体大小为20px 对于每种View 都会有一系列的可以设置的属性 具体的属性可参考每个View的说明文档 声明资源 2 创建好这个布局文件之后 再把这个文件需要的android text string sayhello 在res values strings xml中声明一下 这时已经可以运行一下这个Activity 看看最终显示的效果是否和预期的一致 如果有差别 可再调整一下 修改交互动作 第3步 现在 UI已经设计好了 修改ADT自动创建的Activity 其名字为 HelloOneActivity java 用这个Activity来显示这个UI 修改交互动作 这里面有些语句需要解释 Buttonbutton 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 就会在R java中对应的生成一个ID button setOnClickListener newView OnClickListener 现在的GUI程序 好像都喜欢事件驱动的模型 有人这样描述过GUI系统本质 在事件驱动下动态地展现数据模型的图形系统 在这个语句中 setOnClickListener就是为button添加一个事件监听 监听OnClick事件 也就是说 如果一旦触发button的OnClick事件 就会执行后面定义的功能 运行程序接口 4 运行程序 4 3多个Activity的用户界面示例 这里将解释如何创建多个Activity的用户界面 以及了解Activity的生命周期 这个多Activity的示例程序的功能大概是这样的 在主页面上有三个元素 一个文本输入框 两个按钮 用户可以在文本框中输入一些字符 点击第一个按钮 将弹出一个对话框形式的Activity 显示 Hello 如果点击的是第二个按钮 将显示另一个全屏的Activity 显示 Hello 4 3多个Activity的用户界面示例 1 创建项目 这里 项目的名字为 HelloThreeActivity 应用程序的名字为 ActivityLifecycle 包名为 org myandroid HelloThreeActivity 默认创建的Activity的名字为 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 用来显示主画面 AlertDialog 用来显示对话框 和AlertActivity 用来显示那个全屏的Activity 5 编辑AndroidManifest xml 这个文件像一个户口簿一样记录每一个Activity的信息 Android系统会通过这个文件得到 执行这个程序的时候 启动的是那个Activity等信息 不仅如此 这个还包括Intent Provider等其他一些信息 6 这时就可以运行程序了 生命周期的详细说明 如果一个Activity显示在最前端 它的状态是active或者是running 如果一个Activity失去焦点 但是还能在屏幕上看到它 比如说 被一个非全屏的或者是透明的另一个Activity遮盖 它此时的状态是paused 一个处于paused状态的Activity 保持着所有自身的状态和信息 秉持着与windowmanager的联系 但是当系统内存不足时 可能会被系统终止 如果一个Activity完全看不见了 被其他的Activity完全挡住 它的状态变成stopped 处于stopped的Activity虽然也保留着如同paused状态一样的特性 但是此时的它更容易被系统终止 如果一个Activity处于paused或者stopped状态时 系统可以通过要求Activity结束或者强制kill的方式从内存中删除这个Activity 当它在此需要显示时 就需要restart和重新加载以前的数据 可见 适时的保存数据的重要性 Android应用的生命周期 第五章Android数据存储开发 5 1SharedPreferences5 2Files5 3SQLite5 4Network5 5ContentProvider 数据存储开发概述 在Android中 可供选择的存储方式主要有5种 分别是SharedPreferences Files 文件 SQLite SQLite数据库 Network 网络 和ContentProvider 内容提供器 SharedPreferences 类似于我们常用的ini文件 用来保存应用程序的一些属性设置 在Android平台常用于存储较简单的参数设置 数据存放在目录 data data shared prefs 中 存储成XML格式的文件 我们无法在多个应用程序间共享Preferences数据 Files 文件存取I O 文件用来存储大数量的数据采用java io 库所提供有I O接口 读写文件 只有本地文件可以被访问 优点是可以存储大容量的数据 其缺点是文件更新或是格式改变可能会导致巨大的编程工作 数据存储开发概述 SQLite SQLite数据库 SQLite是一个开源的轻量级关系型数据库 具有ACID 指数据库事务正确执行的四个基本要素的缩写 包含 原子性 Atomicity 一致性 Consistency 隔离性 Isolation 持久性 Durability 的特性 其体积大小只用几千字节 部分的支持一些SQL的指令 例如 ALTER TABLE等 Android提供了一个名为SQLiteDatabase的类 该类封装了一些操作数据库的API 使用该类可以完成对数据进行添加 Create 查询 Retrieve 更新 Update 和删除 Delete 操作 这些操作简称为CRUD Network 网络 Android还提供了网络存储数据的方式 需要要使用两个包 和 其实就是与网络服务器取得联系 将数据存放于网络服务器上或从网络服务器读取数据 数据存储开发概述 ContentProvider ContentProvider是所有应用程序之间数据存储和检索的一个桥梁 它的作用就是使得各个应用程序之间实现数据共享 Android为常见的一些数据提供了ContentProvider 包括音频 视频 图片和通讯录 每个ContentProvider都会对外提供一个公共的URI 包装成Uri对象 如果应用程序有数据需要共享时 就需要使用ContentProvider为这些数据定义一个URI 然后其他的应用程序就可以通过ContentProvider传入这个URI来对数据进行操作 URI由3个部分组成 content 数据的路径 标识ID 可选 5 1SharedPreferences 首先介绍的是SharedPreferences 它是Android提供用来存储一些简单的配置信息的一种机制 例如 一些默认欢迎语 登录的用户名和密码等 其以键值对的方式存储 使得我们可以很方便的读取和存入 下面是一个示例 其功能是保存文本框中的数据 这里的用户名和密码 1 新建Android项目 HelloSharedPreferences 2 修改其布局文件main xml 在一个LinearLayout当中放3个TextView和两个EditView组件 5 1SharedPreferences 3 修改HelloSharedPreferences java 使得应用程序退出时 自动保存上面文件框中的内容 在onCreate中使用findViewById得到两个EditView后 使用getSharedPreferences取得SharedPreferences对象settings 然后使用getString取得其中保存的值 最后使用setText将其值设置为两个EditText的值 而在程序运行onStop过程 也就是在程序退出时 首先使用getSharedPreferences得到settings 然后调用edit 方法使其处于可以编辑状态 并使用putString将两个EditText中的值保存起来 最后使用commit 方法提交即可保存 5 1SharedPreferences 4 运行程序 5 2Files 和传统的Java中实现I O的程序类似 在Android中 其提供了openFileInput和openFileOuput方法读取设备上的文件 下面是一个示例程序 其功能是将文本框中输入的内容存入在文件中去 1 创建 HelloFiles 项目 2 修改布局文件main xml 3 在strings xml中增加上面用的资源 4 最后就是增加按钮按下时 把文本框中的内容存入文件test txt中的处理事件 在HelloFiles java中增加内容 5 2Files 5 运行程序 当点下 Savetofile 时 可在Android系统中的 data data PACKAGE NAME files 目录下看到应用程序创建的text txt文件 5 3SQLite SQLite是Android所带的一个标准的数据库

温馨提示

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

评论

0/150

提交评论