android项目开发总结_第1页
android项目开发总结_第2页
android项目开发总结_第3页
android项目开发总结_第4页
android项目开发总结_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

1 / 53 android 项目开发总结 做了几个 android 企业应用项目后,总结了项目的基本开发步骤,希望能够交流。 一 应用规划: 确定功能。 必须的界面及界面跳转的流程。 需要的数据及数据的来源及格式。 是否需要服务端支持。 是否需要本地数据库支持。 是否需要特殊权限。 是否需要后台服务。 2 / 53 二 架构设计: 分层。 网络连接。 数据处理 -xml、 domain。 封装 Activity。 三 界面设计: 主界面确定。 模块界面、列表、查看、编辑界面。 菜单、按钮、对话 框、提示信息。 界面总体颜色。 四 数据操作和存储: 3 / 53 数据来源。 数据类型。 存储方式。 五 业务实现: 客户端业务解析。 六 页面跳转: 每个页面间的跳转。 菜单、按钮、事件等。 关键字 : android app, android develop, android summary 从启动该项目到现在完成主要功能模块 ,分享一下开发历程和注意事项。 开发环境 : + eclipse + sdk 4 / 53 下面是开发总结 : 1. 基于源码级的 SDK以及 SDK升级注意事项 o o o o o ? ? 熟悉其如何做资源国际化 熟悉其如何支持不同屏幕大小 ,不同 density介质 熟悉其主要的 API以及支持的最低版本和不被再支持的 API 了解其分层架构 升级 SDK 确保该平台支持相关的 cglib 版本 (否则要升级 ubuntu) 简单容行的方式是 remove /.android 下的相关东西 ,remove 先5 / 53 前的相关版本 , 再升级 ? ? 2. 部分 Resources(如 strings 中有 %s 的 )可能需要修改才能适应新的版本 新的 sdk 里可能不包括老的如版本 Emulator & Mobile o ? o ? 用 adb shell 操作 emulator push / pull file in emulator Eclipse-window-Show View-File Explorer- pull a file from the device(or push a file onto the device) 6 / 53 o ? 用 real mobile 连接 usb 来直接测试 (mobile 必须设置为 develop/debug mode) o emulator更能用于性能测试 ,功能测试。而 mobile 更适合触摸操作测试和一些 View的真 实展现测试 o o 3. 屏幕大小适应测试 (枚举大,中,小 ),屏幕方向 (枚举横 ,竖屏 ),任务切换测试 内存适应只能在 mobile 上做测试 系统配置项 o ? 7 / 53 ? o ? ? SharedPreferences 存储位置及如何在 emulator上手动修改 找到存储位置 : datadatayour package dirshared_prefsyour xml files 按照上面的 pull/push the file SQLite(sqlite3) 默 认 存 储 位置 :datadatayour package dirdatabasesyour database name 按照上面的用 adb shell 操作 emulator 做部分 database 的设计和数据更新 ? o ? ? 8 / 53 o ? ? ? 设计版本更新和升级 Other File I/O assert 下文件读取 文件权限以及读写 解读 application/process标识 最开始启动的 activity activity 栈的形式 (指定taskAffinity&launchMode=singleTask),而且转向一个 新的 activity是用 (_ACTIVITY_REORDER_TO_FRONT)的形式 ? ? 4. 需 要 的 权 限 部 分 支 持 的 最 低 版 本 基于View,Context,Manager 的开发 o ? 9 / 53 ? ? 系统 View & Layout(Layout 也是 View) 用 View本身来做其他 Layout 间的一个分隔 常用的 View&Layout: ListView,ScrollView,RelativeLayout,TableLayout 设计常用的 style/theme 用到的 Drawable: ? ? ? o ? 常用的图片操作 指定颜色的渲染 (setColorFilter) 剪裁 自定义 View & Layout Java 代码 10 / 53 Java代码 ? o ? ? ? Application,Activity,Service,View,Intent Application,Activity,Service 与 Context的关系 View与Context 的 关 系 用 Application 来做Activity,Service,View 间 的 全 局 变 量 ( 这 比 自 己 用Singleton 实现好 ) ? 11 / 53 ? ? o 2. 网络 IO 用工厂模式使用 Intent 做 activity 跳转 sendBroadcast( 实 时 数 据 交 换 可 借 助 Thread+ BroadcastReceiver) WindowManager 、 PackageManager 等的使用 o o o ? 如果没有让他在 AsyncTask 中操作,则他的TimeOut设置必须少于 5 秒 (为 ANR 等待时间 ) 12 / 53 ? ? 如果发生在 emulator,可参 考 : /topic/521023 如果发生在 mobile,则一般是 DNS解析问题,要么允 许用户再重试操作,要么把 Host 的域名改为 public ip address ? 3. 绘图部分 o ? 在 View 上绘图 只在原来 View上加边框等 ? Java代码 13 / 53 ? ? 自定义 View Java 代码 o ? 在 Bitmap 上绘图 Java代码 2. 动画 o ? o ? 14 / 53 ? ? ? 3. ANR 帧动画 控制侦速率在 25FPS 以让其更流畅 渐变动画 平移 缩放 旋转 透明 o o 4. 构建消息以及消息循环处理 Handler 使用 AsyncTask Exception & UncaughtException o 5. 使用 UncaughtExceptionHandler 引入第三方 jar以及与其他 app 共享数据 15 / 53 o o 6. 通过 add user library 方式添加第三方 jar Content Provider的使用 性能优化 /调优 o 基于 View 的优化 o o ? o ? 代码级的规范 Method 级的调优 Method Profiling(如果直接 usb连接 mobile,需要 root权限作此项 ) GC分析 使用 Allocation Tracker 实训报告 16 / 53 姓 名: 祝新 学 号: 1144131 专 业: 软 件 技 术 课程名称: android 实 训 项目名称: 闹铃 指导教师: 王皓 实训日期: 2016 年 10月 28日 至 2016 年 1 月 2 日 2016年 1月 2 日 目 录 第一章 概述 . 1 第二章 需求分17 / 53 析 . 2 项目背景 . 2 项目需求 . 2 第三章 相关技术 . 3 Adnroid 平台介绍 . 3 18 / 53 关键技术研究 . 3 第四章 概要设计 . 4 系统体系结构 . 4 用户界面设计 . 4 第五章 详细设计 . . 6 19 / 53 添 加 闹 铃 功 能 模块 . 6 第六章 结论 . 16 第一章 概述 本课题要求:设计一个基于 Android 的位置闹钟的软件。实现的功能有: a) 能在 Android上利用其提供地相关 API获取位置信息。 b) 能通过界面设置闹钟的启动条件,包括入场与出场条件的设 c) 建立后台服务进程,监查位置信息,当满足触发条件时,闹钟响应相应事件。 20 / 53 需重点研究的关键问题:通过 Android Api 获取位置信息,并在指定地点设置闹钟 提醒。 解决思路:在界面里显示当前位置信息,并输入指定地点的经纬度值,编程实现对位置信息实时更新,将两者的经纬度转换为距离,如在误差范围内则启动闹铃功能。 第二章 需求分析 项目背景 移动互联网时代的来临,直接促进了搭载智能操作系统、具有强大扩展性的智能手机、平板电脑等移动终端产业的蓬勃发展。搭载安卓操作系统的智能手机目前已经成为市场上最炙手可热的智能产品。开放的源代码和零成本已经让安卓在全世界范围内受到青睐并迅速获得了主要手机厂商和数百万软件开发者的支 持, 2016年安卓系统的市场份额已经超过Symbian,成为全球第一大智能手机操作系统。 GPS产业从军用转入民用后,正在逐渐向普通消费群体发展,作为使用终端的 GPS 产品正逐渐的深入人们生活得各个领域。 GPS使用终端最主要的应用方面主要体现在各种接收器,21 / 53 比如航空、航海用途的接收器,汽车导航设备,或用于登上、远足的手持接收器等终端产品。 GPS 接收终端的结构包括,接收天线、芯片组、电池等,以及外部按 键和液晶面板等相关零部件。 该课题实现在手机操作系统 Android上将 GPS导航和闹钟提醒两个功能结合起来,携带方便,并能超越传统的时间闹钟提醒功能,使用起来灵活、快捷、省心,是一款实用而且高端的手机软件。 项目需求 “ 位置闹钟 ” 是一款提醒你地点的软件,它通过地图指定提醒的目的地,同时要求定位精确、使用过程可用 Wifi 和普通无网络。 “ 位置闹钟 ” 可以通过 GPS定位和手机蜂窝基站定位两种定位方式来监测用户所在位置。当你靠近目的地的时候, “ 位置闹钟 ” 会进行闹钟提醒。而在封闭的空间中,如拥挤的公交车上,接收不到卫星的 GPS信号,此时,手机基站定位就可派上用场。虽然基 站的定位精度比起 GPS来说稍低,但完全可以满足位置提醒的要求。此外, “ 位置闹钟 ” 还可以后22 / 53 台运行,且能和普通闹钟一样设置多个位置闹铃,有良好的人机交互界面,可对其编辑、启用或禁用。 第三章 相关技术 Adnroid平台介绍 Android是一种基于 Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由 Google 公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用 “ 安卓 ” 或 “ 安致 ” 。 Android操作系统最初由 Andy Rubin开发,主要支持手机。 XX 年 8 月由 Google 收购注资。 XX 年 11 月, Google与 84 家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良 Android 系统。随后 Google 以 Apache开源 许可证的授权方式,发布了 Android的源代码。第一部Android 智能手机发布于 XX 年 10 月。 Android 逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机等。 2016年第一季度, Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2016年 11月数据显示, Android 占据全球智能手机操作系统市场 76%的份额,中国市场占有率为 90%。2016年 09月 24日谷歌开发的操作系统 Android 在迎来了 5 岁生日,全世界采用这款系统的设备数23 / 53 量已经达到 10亿台。 关键技术研究 应用 SQLLite数据库: SQLite提供结构化的数据存取。 SQLite是一款轻型的数据库,它的设计目标是嵌入式的,目前已经在很多嵌入式产品使用了它,它占用的资源非常低。它能够支持 Windows/Linux/Unix 等主流的操作系统,同时能够跟很多程序语言相结合,比如 php, Java 等,还有 ODBC接口,同样比起 Mysql, PostgreSQL 来讲,它的处理速度比它们都快。它无需安装和管理配置,它是一个储存在单一磁盘文件中的完整数据库,体积小 ,虽只有 250KB 但支持数据库大小至 2TB。它虽然很小巧,但是支持的 SQL 语句毫不逊色于其它开源数据库。同时它还支持事务功能和并发处理等等。SQLite 也是一套开放性的关联式资料库,其特点在于轻量性方面的设计结构,更适合在手机上使用。 Android开发简介 Android应用程序的五大基本组件 Activity 应用表示层 一个活动表示一个可视化的用户界面,关注一个用户从事的事件。例如,一 个活动可能表示一个用户可选择24 / 53 的菜单项列表,或者可能显示照片连同它的标题。一个文本短信应用程序可能有一个活动,显示联系人的名单发送信息;第二个活动,写信息给选定的联系人;其他活动,重新查看旧信息或更改设置。虽然他们一起工作形成一个整体的用户界面,但是每个活动是独立于其他活动的。每一个都是作为 Activity 基类的一个子类的实现。 应用程序中的每个屏幕都是通过继承和扩展基类 Activity 来实现 的。 同一应用中的每个 Activity 是相互独立的。程序启动后显示的第一幅画面是应用程序的第一个 Activity ,而后可以根据需要从这个 Activity 启动另一个新的 Activity 。 Activity 利用 View 来实现应用中的 GUI 。 Activity 窗口内的可见内容通过基类 View 提供。使用 () 方法设置当前 Activity 中的 View 对象。 每个 View 对象控制着窗口内的一个矩形空间; View 是一种层次化结构, Parent View 中的布局属性会被子 View 继承; 位于 View 层次关系最底层的子 View 对象所代表的矩形空间就是跟用户进行交互的地方 25 / 53 Activity 状态回调: onCreate onRestart onResume onPause onStop onDestroy Service 没有可见的用户界面,但能够长时间运行于后台 一个服务没有一个可视化用户界面,而是在后台无期限地运行。例如一个服务可能是播放背景音乐而用户做其他一些事情,或者它可能从网络扩取数据,或计算一些东西并提供结果给需要的活动。每个服务都继承自 Service基类。 26 / 53 运 行于应用程序进程的主线程中,因此 Service 不会阻塞其他组件和用户界面。 Service 是不能自己启动的,必须通过 Context 对象调用 startService 或 bindService 方法来启动。 1. 调用 startService 方 法 a) 若 Service 没有启动,则首先会调用该 Service 的 onCreate 方法,然后再调用 onStart 方法。 b) 若 Service 已经启动,则会直接调用 onStart 方法 c) 该方法启动的 Service ,可以通过 Context 对象调用 stopService 来关闭,也可以通过 Service 自身调用 stopSelf() 或 stopSelfResult() 来关闭,关闭之前调用 onDestory 方法。 2. 调用 bindService 方法 ,使当前 Context 对象通过 一个 ServiceConnection 的对象绑定到所指定的 Service a) 若 Service 没有启动,则首先会调用该 Service 的 onCreate 方法初始化启动,然后调用 Service 27 / 53 的 onBind 方法初始化绑定。 b) 如果绑定 Service 的 Context 对象被销毁时,被绑定的 Service 也会调用 onUnbind 和 onDestroy 方法停止运行 c) 注意: BroadcastReceiver 是不能绑定服务的。 d) 一个绑定 Service 的 Context 对象还可以通过 unbindService() 来取消对服务的绑定。 e) 取消时, Service 会调用 unbind 方法,若 Service 是通过 bindService 来启动 的,还 会调用 onDestroy 方法来停止服务。 Service 状态回调: onCreate onStart onRebind 28 / 53 onUnbind onDestroy Broadcast Receiver 用户接收广播通知的组件 一个广播接收者是这样一个组件,它不做什么事,仅是接受广播公告并作出相应的反应。许多广播源自于系统代码,例如公告时区的改变、电池电量低、已采取图片、用户改变了语言偏好。应用程序也可以发起广播,例如为了他其他程序知道某些数据已经下载到设备且他们可以使用这些数据。一个应用程序可以有任意数量的广播接收者去反应任何它认为重要的公告。所有的接受者继承自 BroadcastReceiver 基类。 Android 中的广播要么来自于系统,要么来自普通应用程序。 很多事件都可能导致系统广播,如手机所在时区发生变化,电池电量低,用户改变系统语言设置等。 来自普通应用程序,如一个应用程序通知其他应用程序某些数据已经下载完毕。 29 / 53 为了响应不同的事件通知, 应用程序可以注册不同的 Broadcast Receiver 。所有的 Broadcast Receiver 都继承自基类 BroadcastReceiver 。 BroadcastReceiver 自身并不实现图形用户界面,但是当它收到某个通知后, BroadcastReceiver 可以启动 Activity 作为响应,或者通过 NotificationMananger 提醒用户。 BroadcastReceiver 是对发送出来的 Broadcast 进行过滤接收并响应的一类组件。 发送 Broadcast 信息 1. 把要发送的信息和用于过滤得信息 ( 如 Action 、 Category) 装入一个 Intent 对象 2. 调用 Context. sendBroadcast() 、 sendOrderBroadcast() 、 sendStickyBroadcast() 方法,广播该 Intent 对象 30 / 53 3. 使用 sendBroadcast() 或 sendStickyBroadcast() 方法发出去的 Intent ,所有满足条件的 BroadcastReceiver 都会随机地执行其 onReceive() 方法; 4. 而 sendOrderBroadcast() 发出去的 Intent ,会根据 BroadcastReceiver 注册时 IntentFilter 设置的优先级的顺序来执行,相同优先级的 BroadcastReceiver 则是随机执行 5. sendStickyBroadcast() 方法主要的不同是, Intent 在 发 送 后 一 直 存 在 , 并 且 在 以 后 调 用 registerReceiver() 注册相匹配的 Intent 时会把这个 Intent 直接返回。 6. 若在使用 sendBroadcast() 方法时指定了接收的权限,这只有在 中用 标签声明了拥有此权限的 BroadcastReceiver 才会有可能接收到发送来 Broadcast 。 7. 若在注册 BroadcastReciever 时,指定了可接收的 Broadcast 的权限,则只有在包内的 中用 标签声明了,拥有此权限的 Context 对象所发送的 Broadcast 才31 / 53 有可能被这个 BroadcastReceiver 所接收。 接收 Broadcast 消息 1. 继承 BroadcastReceiver 类 , 并 实 现 onReceive 方法 2. 注册 Broadcast Receiver Content Provider 为解决应用程序间数据通信、共享的问题 内容提供者使一个应用程序的指定数据集提供给其他应用程序。这些数据可以存储在文件系统中、在一个 SQLite 数据库、或以任何其他合理的方式。内容提供者继承自ContentProvider 基类并实现了一个标准的方法集,使得其他应用程序可以检索和存储数据。然而,应用程序并不直接调 用 这 些 方 法 。 相 反 , 替 代 的 是 它 们 使 用 一 个ContentResolver 对象并调用它的方法。 ContentResolver能与任何内容提供者通信,它与提供者合作来管理参与进来的进程间的通信。 在 Android 中,每个应用程序都是用自己的用户 ID 并在32 / 53 自己的进程中运行。这样的好处是,可以有效地保护系统及应用程序,避免被其他不正常德应用程序所影响,每个进程都拥有独立的进程地址空间和虚拟空间。 Content Provider 可以将应用程序特定的数据提供给另一个应用程序使用。其数据存储方式可以是 Android 文件系统、 SQLite 数据库或者其他合理的方式。 当数据需要在应用程序间共享时,我们就可以利用 ContentProvider 为数据定义一个 URI 。之后,其他应用程序对数据进行查询或者修改时,只需要从当 前上下文对象获得一个 ContentResolver, 然后传入响应的 URI 就可以了。 Content Provider 继 承 自 基 类 ContentProvider ,并且实现了一组标准接口。通过这组接口,其他应用程序能对数据进行读写和存储。然而,需要使用数据的应用程序并不是直接调用这组方法,而是通过调用 ContentResolver 对象的方法来完成。 ContentResolver 对象可以与任意 ContentProvider 通信。 要为当前应用程序的私有数据定义 URI ,就需要专门定义一个继承自 33 / 53 ContentProvider 的类,然后根据不同的操作调用的方法去实现这些方法的功能。 ContentResolver 类为应用程序提供了接入 Content 机制的方法。要构造一个 ContentResolver 对象可以为构造方法 ContentResolver(Context context) 传入一个 Context 对象,也可以直接通过 Context 对象调用 getContentResolver() 方法获得 有的 ContentResolver 对象后,就可以通过调用其 query() 、 insert() 、 update() 等方法来对数据进行操作了。 一旦需要以上 4 种 Android 应用程序基本组件完成请求, Android 会首先确认该组件所在进程是否运行,如果没有运行, Android 将先启动进程,同时确认被请求组件的实例是否存在,否则将创建一个新的组件实例。 Intent 连接组件的纽带 以上 4 种基本组件中,除了 Content Provider 是通过 Content Resolver 激活外,其他 3 种组件 Activity 、 Service 和 Broadcast Receiver 都是由 Intent 异步消息激活的。 Intent 在不同的组件之间传递消息,将一个组件的请求意图传给另34 / 53 一个组件。因此, Intent 是包含具体请求信息的对象。 针对不同的组件, Intent 所包含的消息内容有所不同,且不同组件的激活方式也不同, 且不同类型组件有传递 Intent 的不同方式。 Intent 是 一种运行时绑定机制,它能够在程序运行的过程中连接两个不同的组件。通过 Intent ,你的程序可以向 Android 表到某种请求或者意愿, Android 会根据意愿的内容选择适当的组件来处理请求。 l 激活一个新的 Activity ,或者让一个现有的 Activity 执行一个新的操作,可以通过调用如下两种方法 ( 这两汇总方法需要传入的 Intent 参数称为 Activity Action Intent) : 1. () 2. () l 启动一个新的服务,或者向一个已有的服务传递新的指令,可以调用 如下两种方法: 35 / 53 1. () 2. () l 发送广播 Intent( 所有已注册的拥有与之相匹配 IntenFilter 的 BroadcastReceiv 就会被激活 ) ,可以调用如下三种方法: 1. () 2. () 3. () Intent 一旦发出, Android 都会准确找到相匹配的一个或多个 Activity 、 Service 或 BroadcastReceiver 作响应。所以,不同类型的 Intent 消息不会出现重叠, BroadcastIntent 消息只会发送给 BroadcastReceiver ,而绝不可能发送给 Activity 或 Server 。有 startActivity() 传递的消息也只可能发送给 Activity ,由 startService() 传递的 Intent 只可能发送给 Service 。 开发过程中注意事项: 36 / 53 开发过程不懂的就查找 API,会有很大的帮助 ? 每创建一个 Activity都要在中声明,否者报错。 如何获取标题栏和状态栏高度 1.获取状态栏高度: decorView 是 window 中的最顶层 view,可 以从 window 中获取到 decorView , 然 后 decorView 有个getWindowVisibleDisplayFrame 方法可以获取到程序显示的区域,包括标题栏,但不包括状态栏。 于是可以算出状态栏的高度了。 Rect frame = new Rect(); getWindow().getDecorView().getWindowVisibleDisplayFrame(frame); int statusBarHeight = ; 2.获取标题栏高度: 37 / 53 getWindow().findViewById(_ANDROID_CONTENT) 这个方法获取到的 view 就是程序不包括标题栏的部分,然后就可以知道标题栏的高度了。 int contentTop = getWindow().findViewById(_ANDROID_CONTENT).getTop(); /statusBarHeight 是上面所求的状态栏的高度 int titleBarHeight = contentTop - statusBarHeight; - 让 EditTextView 不能输入的方法 (new InputFilter new InputFilter() Override public CharSequence filter(CharSequence source, int 38 / 53 start, int end, Spanned dest, int dstart, int dend) return () ); - 全屏问题,在程序一加载的时候就让它是全屏 (_NO_TITLE); ().setFlags(_FULLSCREEN, _FULLSCREEN); 中这样写 39 / 53 android:theme=android:style/ - 设置控件是否显示的属性设置 android 属性 android:visibility 此属性意思是此视图是否显示,例如 RelativeLayout 中android:visibility=gone 其有三个属性: visible 显示; invisible 显示黑背景条;gone不显示 在类中,可以设置其显示与否, setVisibility();不显示 setVisibility();显示 - 40 / 53 为了避免软键盘挡上输入框,可以试试设置 或者 - 设置控件的宽高,用 setlayoutparams 方法 - 做应用时,可能会需要动态改变控件的背景图片,如果仅仅是简单的点击,选中之类的事件,如果靠程序中写监听的代码就显得太麻烦了,在这种情况下,你可以使用 selector动态改变控件背景 1、在 res/drawable 目录下建一个文件,根据需要,不同的状态下建立不同的 item,并对应相应的图片 41 / 53 android:drawable=drawable/pressed_application_background_static / android:state_window_focused=true android:drawable=drawable/focused_application_background_static / android:drawable=android:color/transparent / 2、在构造 layout 是引用这个 xml android:id=+id/imagebutton android:layout_width=wrap_content android:layout_height=wrap_content android:src=drawable/normalbackground 42 / 53 android:background=drawable/handlebackground 为 你要显示的前景图片 pressed_application_background_ 为点击时的背景 focused_application_background_ 为焦点停留时的背景 - 取得 androidsdk 的版本,并设置动画效果 int version = (); if (version = 5 ) overridePendingTransition(, ); /此为自定义的动画效果,下面两个为系统的 两个自定义的动画效果 XML文件,存放位置为: res/anim/ 43 / 53 1,动画进入效果: android:interpolator=android:anim/decelerate_interpolator android:fromYScale= android:toYScale= android:pivotX=50%p android:pivotY= 50%p android:duration=android:integer/config_mediumAnimTime / 复制代码 2,动画退出效果: android:interpolator=android:anim/decelerate_interpolator android:zAdjustment=top android:fromYScale= android:toYScale= .5 44 / 53 android:pivotX=50%p android:pivotY= 50%p android:duration=android:integer/config_mediumAnimTime / android:duration=android:integer/config_mediumAnimTime / - 获得控件在屏幕或窗口内的坐标 int location = new int2 ; (location); /获取在当前窗口内的绝对坐标 (location);/获取在整个屏幕内的绝对坐标 location 0-x坐标 ,location 1-y坐标 45 / 53 - 控件对齐那点事 android:gravity 属性是对该 view 内容的限定比如一个button 上面的 text. 你可以设置该 text 在 view的靠左,靠右等位置该属性就干了这个 android:layout_gravity 是用来设置该 view 相对与起父view 的位置比如一个 button 在 linearlayout 里,你想把该 button放在靠左 靠右等位置就可以通过该属性设置 - 几种 Menu的使用说明 Menu. 通过按下手机上的 MENU键,可以打开 Options Menu。 Options 46 / 53 Menu最多只能在屏幕最下面显示 6个菜单项,称为 Icon Menu.如果添加了多于 6 个的菜单项,将 通过 More菜单项显示,这种称为 Expanded Menu.当 Options Menu 第一次被打开时,系统将调用 Activity 的 onCreateOptionsMenu(Menu menu)方法,在这个方法中可以通过配置一个 XML文件,或者调用Menu的 add()方法来添加你想要的 Menu。 Menu的 add()方法将返回一个 MenuItem 对象,你用通过这个对象来配置一些其他属性。比如: icon, shortcut, intent。 Menu 的 add()方法很多,要注意的是 itemId这个参数,它的唯一性。 当 选 择 了 一 个 Options Menu 时 , 会 调 用onOptionsItemSelected(MenuItem item)方法。如果想修改Options Menu,需要重写 onPrepareOptionsMenu()方法。 方式一,用 add()添加: /* Creates the menu items */ public boolean onCreateOptionsMenu(Menu menu) (0, MENU_NEW_GAME, 0, New Game); 47 / 53

温馨提示

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

评论

0/150

提交评论