OPhone培训2_应用编程.ppt_第1页
OPhone培训2_应用编程.ppt_第2页
OPhone培训2_应用编程.ppt_第3页
OPhone培训2_应用编程.ppt_第4页
OPhone培训2_应用编程.ppt_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

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

文档简介

OPhone应用编程 作者 TD产业联盟日期 2010 09 主要内容 OPhone应用程序基本概念OPhone图形单位通用布局对象Layout菜单和基本控件Activity间切换和数据传递IntentFilter和ServiceOPhoneWidgetOPhone动画OPhone性能以及ANR OPhone应用程序基本概念 OPhone应用程序基本概念 组成OPhone应用程序的主要组件 Activity IntentReceiver Service ContentProvider OPhone应用程序基本概念 Activity指单一的 集中的事情或者任务 一般都从基类Activity扩展而来 在一个程序里是单一的一个屏幕 显示一个屏幕的UI 和用户进行交互并响应用户输入事件 有两个常用的方法 onCreate Bundle 初始化Activity 设置UI元素 onPause 离开Activity界面 通过启动其它的Activity实现屏幕之间的切换 所有的Activity由系统的Activity栈管理 新创建的Activity在栈的最上面 每个Activity有4个状态 active running paused stopped killed shutdown OPhone应用程序基本概念 Activity工作流程 OPhone应用程序基本概念 Intent指目的 意图 是将要执行操作的抽象描述 大多数情况下用于启动其他的Activity 是Activity之间的粘合剂 IntentFilter描述了一个Activity能够处理什么样的Intent 该Activity对什么样的Intent和Action有兴趣 通过调用startActivity dstIntent 方法实现在Activity之间导航 OPhone应用程序基本概念 IntentReceiverIntent接收器 用于执行具体的工作和响应外部事件 比如来电 闹钟 提醒等 Service在后台运行的应用程序 一般没有UI界面 不能和用户进行交互 提供某种具体服务 一般从Service继承 ContentProvider主要用于和其它的应用程序进行数据共享 OPhone应用程序基本概念 应用程序的生命周期每一个Android应用程序运行在自己的Linux进程中 进程的生命周期不能被自己直接管理 而是由系统管理 这取决于应用程序的功能和重要性以及系统的可用内存 组件 Activity Service IntentReceiver 会影响应用程序的生命周期 应用程序是否被关闭取决于它运行的组件的重要性等级以及这些组件的状态 OPhone应用程序基本概念 OPhone进程的重要性等级1 前台进程 需要和用户进行交互 比如运行在屏幕最上面的Activity 2 可见进程 Activity是可见的但是不在前台处于onPause状态 比如在一个Activity前面显示一个确认对话框 3 服务进程 运行着一个服务 但并不可见 比如媒体播放器 网络的上传下载 4 后台进程 本身拥有一个Acitvity处于onStop状态 当系统需要内存时很可能先关闭这样的进程5 空进程 本身不拥有任何活动的组件 会被优先关闭 OPhone应用程序基本概念 常用的Android包Android util包含常用的实用类 比如Log XML等 Android os提供基本的操作系统服务 消息传递 内部进程通信等 android graphics提过基本的图形图像操作 比如画线 显示位图等 android text android text method android text style andandroid text util提供了丰富的文本处理工具 支持长文本和输入法等 android database提供了对数据库操作的底层API android content提供了存取设备数据的各种服务 android view是系统和用户交互框架的核心 android widget提供了标准的用户接口元素 比如各种Button List Edit控件 以及提供Layout管理 android app提供了高层的应用程序模型和Activity的实现等 OPhone图形单位 OPhone图形单位 Pixelspx像素 在Android中与物理屏幕实际像素关联 简写为 px Inchesin英尺 在Android中与物理屏幕实际英尺大小关联 简写为 in Millimetersmm毫米 在Android中与物理屏幕实际毫米大小关联 简写为 mm OPhone图形单位 Pointspt点 1英尺的1 72 与物理屏幕的尺寸相关 简写为 pt Density IndependentPixelsdip密度独立像素 是一个基于物理屏幕密度的抽象单元 这些单元都与一个160dpi屏幕所关联 所以 一个dip就是1个像素在160dpi屏幕上的大小 Dip到pixel的比率与屏幕的密度有关系 但是不需要去直接处理比率问题 通常在使用这个单位时 都习惯写成 dip 避与 sp 混淆 OPhone图形单位 Scale independentPixels比率独立像素 类似dip单元的含义 但是它的比率是根据用户的字体大小偏好来计算的 所以 强烈建议在制定字体大小时 使用此标量 因为一旦你指定了 字体大小将会被屏幕密度和用户的偏好比率所调整 简写为 sp 以上提到的Dimension值可以在xml文件中申明 并且可以方便的被其它布局xml文件引用或者被代码访问 OPhone图形单位 实例说明 Dimens xml res valuses目录下 1px2dp16spJava中取得值 floatdimen Resources getDimen R dimen one pixel XML文档中引用 通用布局对象Layout 通用布局对象Layout FrameLayoutLinearLayoutTableLayoutAbsoluteLayoutRelativeLayout 通用布局对象Layout FrameLayout最简单的布局对象在屏幕上作为一个空的保留空间 可以使用一个单一对象填充它 所有子元素都固定在屏幕的左上角不能为其中的一个子元素指定一个位置 通用布局对象Layout FrameLayout实例 通用布局对象Layout LinearLayout所有子元素沿着一个方向排列 水平方向或者垂直方向 所有的子元素都被堆放在其它元素之后 因此一个垂直列表的每一行只会有一个元素 而不管他们有多宽 而一个水平列表将会只有一个行高 高度为最高子元素的高度加上边框高度 LinearLayout保持子元素之间的间隔以及互相对齐 相对一个元素的右对齐 中间对齐或者左对齐 通用布局对象Layout LinearLayout实例 通用布局对象Layout TableLayout每个子元素都分配到行和列中 不会显示行列的边界线 表格允许单元格为空 单元格不能跨列 通用布局对象Layout TableLayout实例 通用布局对象Layout AbsoluteLayout可以让子元素指定准确的x y坐标值 并显示在屏幕上 0 0 为左上角 当向下或向右移动时 坐标值将变大 AbsoluteLayout没有页边框 允许元素之间互相重叠 通常不推荐使用AbsoluteLayout 除非有正当理由要使用它 因为它使界面代码太过刚性 在不同分辨率的设备上可能不能很好地工作 通用布局对象Layout AbsoluteLayout实例 通用布局对象Layout RelativeLayout允许子元素指定他们相对于其它元素或父元素的位置 通过ID指定 可以以右对齐 或上下 或置于屏幕中央的形式来排列两个元素 元素按顺序排列 因此如果第一个元素在屏幕的中央 那么相对于这个元素的其它元素将以屏幕中央的相对位置来排列 如果使用XML来指定这个layout 在你定义它之前 被关联的元素必须定义 通用布局对象Layout RelativeLayout实例 通用布局对象Layout Layout可以嵌套 Layout可以组成很复杂的结构 具体可以参见ApiDemo 菜单和基本控件 菜单和基本控件 MenuTextViewEditTextButtonRadioCheckBoxListViewSpinner 菜单和基本控件 Menu的用法 1在类中定义菜单IDpublicstaticfinalintADD ID Menu FIRST publicstaticfinalintDEL ID Menu FIRST 1 2重载类Activity的onCreateOptionsMenu方法增加菜单项publicbooleanonCreateOptionsMenu Menumenu super onCreateOptionsMenu menu menu add 1 ADD ID 0 R string menu add menu add 1 DEL ID 0 R string menu del returntrue 3编写菜单消息响应publicbooleanonOptionsItemSelected MenuItemitem switch item getItemId caseADD ID setTitle add break caseDEL ID setTitle del break 菜单和基本控件 TextView的用法 1通过XML创建TextView上述TextView指定了颜色和大小 它的文本使用了string xml里面的labelnum元素 目标号码 2通过代码直接创建TextViewTextViewmyTv newTextView this myTv setTextColor 0 xffffff myTv setTextSize 20 菜单和基本控件 EditText的用法 1通过XML声明EditText2在程序中使用EditText对象 获取EditText对象EditTextmyEt EditText findViewById R id myEt 获取输入的数据StringsVal myEt getText toString todo进行其它数据处理 3响应键盘消息myEt setOnKeyListener newEditText OnKeyListener publicbooleanonKey Viewarg0 intarg1 KeyEventarg2 StringsVal myEt getText toString if arg2 getKeyCode KeyEvent KEYCODE 0 对特殊键值进行处理 returnfalse 菜单和基本控件 Button的用法 1在XML定义Button对象2在程序中获得Button并建立消息响应ButttonbtnExit Button findViewById R id exit btnExit setOnClickListener OnButtonClick privateOnClickListenerOnButtonClick newOnClickListener publicvoidonClick Viewv switch v getId caseR id exit finish break caseR id other todobreak 菜单和基本控件 Radio的用法 1在XML中定义Radio组2在程序中获得Radio按钮组并响应RadioGroupmRadioGroup1 RadioGroup findViewById R id myRadioGroup RadioButtonmRadio1 RadioButton findViewById R id myRadioButton1 RadioButtonmRadio2 RadioButton findViewById R id myRadioButton2 mRadioGroup1 setOnCheckedChangeListener mChangeRadio privateRadioGroup OnCheckedChangeListenermChangeRadio newRadioGroup OnCheckedChangeListener publicvoidonCheckedChanged RadioGroupgroup intcheckedId if checkedId mRadio1 getId todo elseif checkedId mRadio2 getId todo 菜单和基本控件 CheckBox的用法 1在XML中定义CheckBox对象2在程序中获得CheckBox并响应事件CheckBoxmCheckBox1 CheckBox findViewById R id myCheckBox1 CheckBoxmCheckBox2 CheckBox findViewById R id myCheckBox2 mCheckBox1 setOnCheckedChangeListener mCheckBoxChanged mCheckBox2 setOnCheckedChangeListener mCheckBoxChanged privateCheckBox OnCheckedChangeListenermCheckBoxChanged newCheckBox OnCheckedChangeListener publicvoidonCheckedChanged CompoundButtonbuttonView booleanisChecked if mCheckBox1 isChecked true else if mCheckBox2 isChecked true else 菜单和基本控件 ListView的用法 1定义一个从ListActivity继承的类publicclassList1extendsListActivity2定义一个字符串数组privateString mStrings ListItem1 ListItem2 ListItem3 3在OnCreate函数初始化ListpublicvoidonCreate BundlesavedInstanceState super onCreate savedInstanceState setListAdapter newArrayAdapter this android R layout simple list item 1 mStrings 4响应List选择事件publicvoidonItemClick AdapterViewarg0 Viewarg1 intarg2 longarg3 StringsItem mStrings arg2 if sItem ListItem1 选择了第一个Item elseif sItem ListItem2 选择了第二个Item elseif sItem ListItem3 选择了第三个Item 菜单和基本控件 Spinner的用法 1在XML中定义Spinner对象2在程序中初始化SpinnerSpinnermySpinner Spinner findViewById R id mySpinner privatestaticfinalString countriesStr 北京市 上海市 天津市 重庆市 ArrayAdapteradapter newArrayAdapter this android R layout simple spinner item countriesStr adapter setDropDownViewResource android R layout simple spinner dropdown item mySpinner setAdapter adapter 3响应用户选择事件mySpinner setOnItemSelectedListener newSpinner OnItemSelectedListener publicvoidonItemSelected AdapterViewarg0 Viewarg1 intarg2 longarg3 StringsSel countriesStr arg2 然后根据sSel值的不同进行不同的处理 publicvoidonNothingSelected AdapterViewarg0 这个函数必须重载 否则编译不过 Activity间切换和数据传递 Activity间切换和数据传递 1在Activity1中启动另一个Acitvity2a new一个Intent对象 并指定classIntentintent newIntent intent setClass Activity1 this Activity2 class b new一个Bundle对象 并将要传递的数据写入Bundlebundle newBundle bundle putString activity1 data data value c 将Bundle对象分配给Intentintent putExtras bundle d 启动另一个ActivitystartActivityForResult intent 0 2覆盖onActivityResult函数以便接收从Activity2传回的数据protectedvoidonActivityResult intrequestCode intresultCode Intentdata switch resultCode caseRESULT OK Bundlebunde data getExtras StringsRet bunde getString activity2 data todo Activity间切换和数据传递 3创建另一个Activity类并取得Activity1输入的数据a 建立新的Activity2从Activity继承publicclassActivity2extendsActivityb 取得输入的数据Intentintent this getIntent Bundlebundle intent getExtras StringsInputVal bundle getString activity1 data 4从Activity2返回时 回传数据结果bundle putString activity2 data newdatafromactivity2 Activity2 this setResult RESULT OK intent Activity2 this finish 5修改AndroidManifest xml IntentFilter和Service IntentFilter和Service 1以收发短信为例 演示Intent Filter的使用设计界面如右图所示 主要功能是收发短信 这里主要通过收短信的过程说明IntentFilter的使用 2定义广播接收器publicclassSmsReceiverextendsBroadcastReceiver publicvoidonReceive Contextcontext Intentintent try Bundlebunde intent getExtras StringsPara bunde getString sms data smsRecv setText sPara catch Exceptione e printStackTrace IntentFilter和Service 3订阅和取消感兴趣的消息a 在主Activity里重载onResume方法publicstaticfinalStringACTION sms received SmsReceivermSrvRecver 定义我们刚才建立的类的对象protectedvoidonResume try IntentFiltersmsfilter smsfilter newIntentFilter ACTION mSrvRecver newSmsReceiver registerReceiver mSrvRecver smsfilter 注册接收器 catch Exceptione e printStackTrace super onResume b 在主Activity里重载onPause方法protectedvoidonPause unregisterReceiver mSrvRecver super onPause IntentFilter和Service 4定义短信接收器publicclassSmsRecvextendsBroadcastReceiver staticfinalStringACTION android provider Telephony SMS RECEIVED publicvoidonReceive Contextcontext Intentintent if intent getAction equals ACTION Bundlebundle intent getExtras StringBuilderstr newStringBuilder Object pdus Object bundle get pdus SmsMessage messages newSmsMessage pdus length for inti 0 i pdus length i messages i SmsMessage createFromPdu byte pdus i for SmsMessagemessage messages StringstrFrom message getDisplayOriginatingAddress StringstrMsg message getDisplayMessageBody str append strFrom n str append strMsg StringsSms str toString Intenti newIntent smsTest ACTION smsTest ACTION sms received i putExtra sms data sSms context sendBroadcast i IntentFilter和Service 5修改AndroidManifest配置文件 IntentFilter和Service 1声明一个从Service继承的类2定义并实现Runnable接口3在onStart方法里启动该接口4在onDestroy里停止服务代码如图所示 IntentFilter和Service 5定义一个从BroadcastReceiver继承的类6实现onReceive方法7在主Acivity里重载onResume方法在这里面订阅Service发布的消息8在主Activiy里重载onPause方法在这里面取消订阅消息 主要代码片段如图所示 IntentFilter和Service 9修改AndroidManifest xml文件如下所示主要增加了Service节点 OPhoneWidget OPhoneWidget 在OPhone平台中 Widget应用采用了JIL JointInnovationLab Widget标准 JILWidget是一个采用HTML JavaScript和CSS等网络技术的应用程序 Widget应用是在Widget引擎上运行的独立的应用程序 Widget已经成为手机上非常流行的技术 可以为用户带来良好的移动互联网体验 随时随地获取有用的资讯 如天气预报 股票信息 头条新闻等 从用户的角度来看 Widget应用和OPhone应用没有什么区别 实际上 Widget应用不同于OPhone应用 OPhone应用是采用Java技术的应用程序 而Widget应用则是采用HTML JavaScript和CSS等网络技术的应用程序 相比较而言 Widget应用的开发更加方便快捷 此外 JILWidget还提供许多JavaScriptAPI来扩展Widget应用的能力 如访问手机电话本 手机文件系统等 OPhone上也可以使用Java开发Widget OPhoneWidget OPhone使用Java开发Widget分以下几个步骤1从类AppWidgetProvider继承2根据需要实现以下几个方法onEnabled Contextcontext onDisabled Contextcontext onDeleted Contextcontext int appWidgetIds onUpdate Contextcontext AppWidgetManagerawm int appWidgetIds onReceive Contextcontext Intentintent 3在res xml目录下定义Widget的xml文件4在AndroidManefest xml里添加intent filter OPhone动画 OPhone动画 OPhone可以对图形控件执行简单的动画指令 这些指令包括 淡入淡出fadein fadeout移动translate拉伸缩放scale旋转rotate OPhone动画 OPhone中定义这些动画有两种方式 一种通过编程定义 一种通过XML文档声明动画组件 这里推荐使用XML文档进行动画的使用和设置 动画文件应该被放置在res anim somename xml下 OPhone动画 Android动画通常以如下5种标签开始 其中set可以包含一个标签组和另外的set OPhone动画 Set标签用来包含多个set或者其它标签 作为他们的容器使用 可选属性 shareInterpolator boolean此属性用来表示是否在其它子元素中共享一个插值器 OPhone动画 alpha标签用来制定淡出动画 表示为一个AlphaAnimation 它支持如下的标签属性 fromAlpha 0 0至1 0 0 0表示完全透明 1 0表示完全不透明 toAlpha 0 0至1 0 0 0表示完全透明 1 0表示完全不透明举例 OPhone动画 scale标签是用来重新计算尺寸的动画 表示为一个ScaleAnimation 在使用中 可以指定要显示图形的中心 通过指定pivotX和pivotY 指定从哪个图形的外部 或内部 缩放 它支持如下的标签属性 fromXScale 开始的X轴尺寸 如果是1 0就是不变toXScale 结束时X轴尺寸 如果是1 0就是不变fromYScale 开始的Y轴尺寸 如果是1 0就是不变toYScale 结束是Y轴尺寸 如果是1 0就是不变pivotX 固定中心的X坐标pivotY 固定中心的Y坐标举例 OPhone动画 translate标签是一个用来进行横向纵向的动画 表示为一个TranslateAnimation 它的属性值有三种不同的后缀 表示了不同的对比对象比率 100 100 表示一个与自己体积的百分比率 100 100 p 表示与其父对象的百分比比率它支持如下的标签属性 fromXDelta 开始的X轴尺寸 如果是1 0就是不变toXDelta 结束时X轴尺寸 如果是1 0就是不变fromYDelta 开始的Y轴尺寸 如果是1 0就是不变toYDelta 结束是Y轴尺寸 如果是1 0就是不变举例 OPhone动画 Rotate是一个旋转标签动画 表示为一个RotationAnimation它支持如下的标签属性 fromDegree 开始旋转的度数 toDegree 结束旋转度数pivotX 开始旋转轴的X中心坐标 使用像素单位pivotY 开始旋转轴的Y中心坐标 使用像素单位举例 OPhone动画 适用于前述所有标签的属性值 duration 在这个动画下的持续时间 startOffset 抵消此动画设置的开始时间 fillBefore 等于true表示动画的变形发生在动画开始之前fillAfter 等于true表示动画变形发生在动画结束之后repeatCount 重复动画次数repeatMode 定义动画在到达结束点和重复次数0时 是否重新开始或反转动画zAdjustment 在运行动画时 设置Z轴的顺序模型Interpolator 设置每个动画元素的运行效率 也就是时间快慢 它的列表在R anim中查询 引用方式 android anim interpolatorName OPhone动画 动画举例 OPhone性能以及ANR OPhone性能以及ANR 1避免频繁创建对象在有限的资源系统中 不断

温馨提示

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

评论

0/150

提交评论