Android课件
- 格式:docx
- 大小:514.47 KB
- 文档页数:11
Android 讲义第一章:初识Android1:Android发展史Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。
Android操作系统最初由Andy Rubin开发,主要支持手机。
2005年8月由Google收购注资。
2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。
随后Google以Apache开源许可证的授权方式,发布了Android的源代码。
第一部Android智能手机发布于2008年10月。
Android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机等。
2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。
2:Android系统架构Android的系统架构和其操作系统一样,采用了分层的架构。
Android结构从架构图看,Android 分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和Linux内核层。
2-1:应用程序Android会同一系列核心应用程序包一起发布,该应用程序包包括客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。
所有的应用程序都是使用JAVA语言编写的。
2-2:应用程序框架开发人员也可以完全访问核心应用程序所使用的API框架。
该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性)。
同样,该应用程序重用机制也使用户可以方便的替换程序组件。
隐藏在每个应用后面的是一系列的服务和系统, 其中包括;丰富而又可扩展的视图(Views),可以用来构建应用程序,它包括列表(Lists),网格(Grids),文本框(Text boxes),按钮(Buttons),甚至可嵌入的web浏览器。
内容提供器(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串,图形,和布局文件(Layout files )。
通知管理器(Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息。
活动管理器(Activity Manager) 用来管理应用程序生命周期并提供常用的导航回退功能。
2-3:系统运行库Android 包含一些C/C++库,这些库能被Android系统中不同的组件使用。
它们通过Android 应用程序框架为开发者提供服务。
以下是一些核心库:* 系统C 库- 一个从BSD继承来的标准C系统函数库Libc ),它是专门为基于Embedded linux 的设备定制的。
* 媒体库- 基于PacketVideo OpenCORE;该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。
编码格式包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 。
* Surface Manager - 对显示子系统的管理,并且为多个应用程序提供了2D和3D图层的无缝融合。
* LibWebCore - 一个最新的web浏览器引擎用,支持Android浏览器和一个可嵌入的web视图。
2-4:Liunx内核层Android 的Linux控制包括安全(Security),存储器管理(Memory Management),程序管理(Process Management),网络堆栈(Network Stack),驱动程序模型(Driver Model)等3:Android运行原理Android 运行时由两部分组成:Android核心库和Dalvik虚拟机,其中核心库提供了大部分Java语言的核心库所能使用的绝大部分功能,而Dalvik虚拟机负责Android应用程序的运行每个Android应用程序都运行在单独的一个Dalvik虚拟机内,因此Dalvik对于同时运行多个虚拟机做了高效的优化,因此Android系统可以很方便的实现对Android应用的隔离Dalvik和JVM不兼容,JVM运行的是class(字节码),而Dalvik运行的是专有的dex。
JVM 能从Class直接读取数据运行,而Dalvik不能,Dalvik必须通过专有的DX工具把class文件编译成dex 文件。
Dalvik基于寄存器实现,JVM基于栈实现Android应用在安装后,运行时系统便会为其分配一个独立的存储空间,所谓的“Security Sandbox”,用于存放字节码文件、资源文件及配置文件等,同时,系统会为每一个应用程序分配唯一的ID,用以标识该应用程序的相关文件和资源,系统通过设置权限从而实现一个应用程序在一般情况下只能访问该应用程序的文件和资源。
当应用程序或者它的某个组件需要运行时,系统便为其创建一个Linux进程,每个进程中实例化一个Dalvik虚拟机用以执行程序的字节码。
程序运行中根据给自己设定的权限来访问相应的资源。
Java-class-dex4:Android环境搭建4-1:下载Android SDK4-2:sdk目录结构(add-ons这里面保存着附加库,docs 所有的文档,platforms所有SDK版本文件,platform-tools保存着一些通用工具,比如adb、和aapt、aidl、dx等文件,这里和platforms目录中tools文件夹有些重复,主要是从android 2.3开始这些工具被划分为通用了,samples 所有版本的实例,tools 作为SDK根目录下的tools文件夹,这里包含了重要的工具,system-images 模拟器文件) 4-3:下载eclipse和ADT插件4-4: android 常用命令:4-4-1: android list target 显示当前系统中所有的android版本Android list avd 显示当前系统中所有的模拟器Android sdk 启动当前系统中的SDK ManagerAndroid avd 启动当前系统中AVD ManagerAndroid list device 显示当前系统中所有的模拟设备Android create avd –name 名称–target 平台编号创建模拟器Android delete avd –name 名称删除模拟器4-4-2: emulator –avd 名称启动模拟器4-4-3: ddms4-4-3: adb devices 显示当前连接的模拟器Adb push 文件路径copy文件到模拟器Adb pull 文件路径copy从模拟器copy文件Adb instance –r apk路径adb shellcd data/apprm apk包exitadb uninstall apk包的主包名5:第一个Android工程第二章:Android 布局及基本控件1:界面编程与视图组件Android的视图组件一般都是放在android.widget,android.view包或者两个包的子包中,Android的UI组件都继承View类。
ViewGroup也是继承自View类,也是一个容器。
ViewGroup的两个子类:layoutParams控制组件放入当前容器里面后组件本身的宽和高MarginLayoutParams 控制组件放入当前容器后和容器之间的距离(上下左右)Android 程序采用XML控制布局,可以将视图和逻辑分离在每个Activity类中都有一个onCreate方法,在这个方法里面的setContentView(yout.activity_main);主要是说明当前activity使用那个一个xml文件布局在xml布局文件中的android:id属性制定当前android控件的唯一标识,这个唯一标识会写入到R文件中,在Activity类中可以使用findViewById(R.id.控件的Id)得到控件控件的setLayoutParams设置当前控件在当前容器中的宽和高(注意当前控件放在什么容器中就要创建和当前容器相匹配的LayoutParams 例如当前控件如果放在线性管理器中那么就要创建new youtParams(youtParams.MATCH_PARENT,youtPar ams.MATCH_PARENT 否则会报错))LayoutParams.MATCH_PARENT全屏LayoutParams.WRAP_CONTENT 正好包含内容sLayoutParams.FILL_PARENT 全屏(android2.2之后推荐使用MATCH_PARENT)View类的方法:onAttachedToWindow 当把该组件放入某个窗口是触发onDetachedFromWindow 当把该组件从某个窗口分离时触发onDraw 当绘制当前组件时触发onFinishInflate 回调方法,当应用从xml布局文件中加载该组件时并利用它来构建界面之后onKeyDownonKeyUp 当在该组件上键盘按下或释放时触发onLayout 当该组件需要分配其子组件的位置,大小时onMeasure 调用该方法来检测view组件及它所包含的子组件的大小onSizeChanged 当该组件的大小被改变的时候onTouchEvent 当发生触摸屏事件时onTrackballEvent 当发生轨迹球事件时onWindowFocusChanged 当组件得到和失去焦点时onWindowVisibilityChanged 当包含该组件的窗口的可见性发生改变的时候2:Android布局管理器为了更好的管理Android应用的用户界面,Android提供布局管理器;布局管理器的宽度和高度一般都是按照父容器的宽和高Android的布局管理器本身就是一个UI组件,所有的布局管理器都是ViewGroup的子类2-1:线性布局线性布局管理器有LinearLayout类来代表,线性布局有点类似于Swing中的FlowLayout,都是将组件一个挨一个的排列起来,LinearLayout提供横向排列和纵向排列(Android:orientation或者l.setOrientation(LinearLayout.HORIZONTAL/LinearLayout.VERTICAL)设置当前容器的排列是按照横向还是纵向)注意LinearLayout布局不会换行,也就是说如果组件的排列超出了范围,那么组件将不可见Android:gravity或者setGravity(int)方法设置当前线性布局管理器内部组件的对其方式:top,left,right,bottom,center_vertical,fiil_vertical,center,fill,center_horiaontal,fiil_horiaontal,clip_ vertical,clip_horiaontal等,也可以使用多种对齐方式例如:left|center_vertical表示出现在屏幕的左边且垂直居中(多个属性值用|分割)2-2:表格布局表格布局使用TableLayout类来代表,表格采用行和列来管理内部组件,TableLayout不需要明确的说明多少行喝多少列,会根据添加的TableRow来控制表格的行,如果直接向TabbleLayout添加组件那么就在TableLayout中直接占据一行表格布局的单元格属性Android:collapseColumns或者setColumnCollapsed(int,boolean) 设置隐藏的列,多个用都好隔开Android:shrinkColumns或者setShrinkColumns(boolean)设置允许收缩的列,多个用逗号隔开Android:stretchColumns或者setStretchAllColumns(boolean)设置运行被拉伸的列<TableLayout android:layout_width="fill_parent"android:layout_height="fill_parent"android:stretchColumns="1,2"android:shrinkColumns="3"android:collapseColumns="4"><TableRow><Button android:text="允许被拉伸的按钮"/><Button android:text="允许被拉伸的按钮"/><Button android:text="允许被收缩的按钮"/><Button android:text="被隐藏的按钮"/><Button android:text="普通按钮"/></TableRow></TableLayout>2-3:帧布局帧布局使用FrameLayout来代表,FrameLayout直接继承ViewGroup类,帧布局为每一个放入容器的组件分配一个空白区域(成为一帧)采用叠加的方式,单FrameLayout不能把最底的控件移到最上层Android:foreground 或者setForegound(Drawable)设置布局管理的前景色2-4:相对布局相对布局使用RelativeLayout来代表,内部的组件相对于兄弟组件和父容器来布局2-5:绝对布局绝对布局使用AbsoluteLayout来代表,类似于Swing中的null布局Android:layout_xAndroid:layout_yPx:对应屏幕的一个点Dip或则dp:基于屏幕密度的抽象单位,在每英寸160点的显示器上1dip==1px;Sp:主要处理字体的大小In:英寸,长度单位Mm:毫米,长度单位Pt:长度单位,1/72in3:基本控件TextView和EditTextEditText属性:android:editable="false" 是否可以编辑已过时,推荐使用android:inputType(android:inputType 值android:inputType="none"--输入普通字符android:inputType="text"--输入普通字符android:inputType="textCapCharacters"--输入普通字符android:inputType="textCapWords"--单词首字母大小android:inputType="textCapSentences"--仅第一个字母大小android:inputType="textAutoCorrect"--前两个自动完成android:inputType="textAutoComplete"--前两个自动完成android:inputType="textMultiLine"--多行输入android:inputType="textImeMultiLine"--输入法多行(不一定支持)android:inputType="textNoSuggestions"--不提示android:inputType="textUri"--URI格式android:inputType="textEmailAddress"--电子邮件地址格式android:inputType="textEmailSubject"--邮件主题格式android:inputType="textShortMessage"--短消息格式android:inputType="textLongMessage"--长消息格式android:inputType="textPersonName"--人名格式android:inputType="textPostalAddress"--邮政格式android:inputType="textPassword"--密码格式android:inputType="textVisiblePassword"--密码可见格式android:inputType="textWebEditText"--作为网页表单的文本格式android:inputType="textFilter"--文本筛选格式android:inputType="textPhonetic"--拼音输入格式android:inputType="number"--数字格式android:inputType="numberSigned"--有符号数字格式android:inputType="numberDecimal"--可以带小数点的浮点格式android:inputType="phone"--拨号键盘android:inputType="datetime"android:inputType="date"--日期键盘android:inputType="time"--时间键盘)android:cursorVisible="false" 是否隐藏光标android:hint="请输入数字!"//设置显示在空间上的提示信息android:numeric="integer"//设置只能输入整数,如果是小数则是:decimalandroid:singleLine="true"//设置单行输入,一旦设置为true,则文字不会自动换行。