内容简介
第1章Android应用初体验
1.1应用基础
1.2创建Android项目
1.3 Eclipse工作区导航
1.4用户界面设计
1.4.1视图层级结构
1.4.2组件属性
1.4.3创建字符串资源
1.4.4预览界面布局
1.5从布局XML到视图对象
1.6组件的实际应用
1.6.1类包组织导入
1.6.2引用组件
1.6.3设置监听器
1.7使用模拟器运行应用
1.8 Android编译过程
第2章Android与MVC设计模式
2.1创建新类
2.2 Android与MVC设计模式
2.3更新视图层
2.4更新控制层
2.5在设备上运行应用
2.5.1连接设备
2.5.2配置设备用于应用开发
2.6添加图标资源
2.6.1向项目中添加资源
2.6.2在XML文件中引用资源
2.7关于挑战练习
2.8挑战练习一:为TextView添加监听器
2.9挑战练习二:添加后退按钮
2.10挑战练习三:从按钮到图标按钮
第3章Activity的生命周期
3.1日志跟踪理解Activity生命周期
3.1.1输出日志信息
3.1.2使用LogCat
3.2设备旋转与Activity生命周期
3.3设备旋转前保存数据
3.4再探Activity生命周期
3.5深入学习:测试onSaveInstanceState-(Bundle)方法
3.6深入学习:日志记录的级别与方法
第4章Android应用的调试
4.1 DDMS应用调试透视图
4.2异常与栈跟踪
4.2.1诊断应用异常
4.2.2记录栈跟踪日志
4.2.3设置断点
4.2.4使用异常断点
4.3文件浏览器
4.4 Android特有的调试工具
4.4.1使用Android Lint
4.4.2 R类的问题
第5章 第二个activity
5.1创建第二个activity
5.1.1创建新布局
5.1.2创建新的activity子类
5.1.3在manifest配置文件中声明activity
5.1.4为QuizActivity添加cheat按钮
5.2启动activity
5.3 activity间的数据传递
5.3.1使用intent extra
5.3.2从子activity获取返回结果
5.4 activity的使用与管理
5.5挑战练习
第6章Android SDK版本与兼容
6.1 Android SDK版本
6.2 Android编程与兼容性问题
6.2.1全新的系统版本——Honeycomb
6.2.2 SDK最低版本
6.2.3 SDK目标版本
6.2.4 SDK编译版本
6.2.5安全添加新版本API中的代码
6.3使用Android开发者文档
6.4挑战练习:报告编译版本
第7章UI fragment与fragment管理器
7.1 UI设计的灵活性需求
7.2 fragment的引入
7.3着手开发CriminalIntent
7.3.1创建新项目
7.3.2 fragment与支持库
7.3.3创建Crime类
7.4托管UI fragment
7.4.1 fragment的生命周期
7.4.2托管的两种方式
7.4.3定义容器视图
7.5创建UI fragment
7.5.1定义CrimeFragment的布局
7.5.2创建CrimeFragment类
7.6添加UI fragment到FragmentManager
7.6.1 fragment事务
7.6.2 FragmentManager与fragment生命周期
7.7 activity使用fragment的理由
7.8深入学习:Honeycomb、 ICS、Jelly Bean以及更高版本系统上的应用开发
第8章 使用布局与组件创建用户界面
8.1升级Crime类
8.2更新布局
8.3生成并使用组件
8.4深入探讨XML布局属性
8.4.1样式、主题及主题属性
8.4.2 dp、 sp以及屏幕像素密度
8.4.3 Android开发设计原则
8.4.4布局参数
8.4.5边距与内边距
8.5使用图形布局工具
8.5.1添加新组件
8.5.2属性视图中编辑组件属性
8.5.3在框架视图中重新组织组件
8.5.4更新子组件的布局参数
8.5.5 android:layout_ weight属性的工作原理
8.5.6图形布局工具使用总结
8.5.7组件ID与多种布局
8.6挑战练习:日期格式化
第9章 使用ListFragment显示列表
9.1更新CriminalIntent应用的模型层
9.2创建ListFragment
9.3使用抽象activity托管fragment
9.3.1通用的fragment托管布局
9.3.2抽象activity类
9.4 ListFragment、ListView及ArrayAdapter
9.4.1 创建ArrayAdapter<T>类实例
9.4.2响应列表项的点击事件
9.5定制列表项
9.5.1创建列表项布局
9.5.2创建adapter子类
第10章 使用fragment argument
10.1从fragment中启动activity
10.1.1附加extra信息
10.1.2获取extra信息
10.1.3使用C rime数据更新CrimeFragment视图
10.1.4直接获取extra信息方式的缺点
10.2 fragment argument
10.2.1附加argument给fragment
10.2.2获取argument
10.3重新加载显示列表项
10.4通过fragment获取返回结果
第11章 使用ViewPager
11.1创建CrimePagerActivity
11.1.1以代码的方式定义并产生布局
11.1.2 ViewPager与Pager-Adapter
11.1.3整合配置并使用CrimePagerActivity
11.1.4 FragmentStatePager-Adapter与Fragment-PagerAdapter
11.2深入学习:ViewPager的工作原理
第12章 对话框
12.1创建DialogFragment
12.1.1显示DialogFragment
12.1.2设置对话框的显示内容
12.2 fragment间的数据传递
12.2.1传递数据给DatePicker-Fragment
12.2.2返回数据给CrimeFragment
12.3挑战练习:更多对话框
第13章 使用MediaPlayer播放音频
13.1添加资源
13.2定义HelloMoonFragment布局文件
13.3创建HelloMoonFragment
13.4使用布局fragment
13.5音频播放
13.6挑战练习:暂停音频播放
13.7深入学习:播放视频
13.8挑战练习:在HelloMoon应用中播放视频
第14章fragment的保留
14.1保留fragment实例
14.2设备旋转与保留的fragment
14.3保留的fragment:一切都完美了吗
14.4设备旋转处理与onSaveInstance-State(Bundle)方法
14.5深入学习:fragment引入前的设备旋转问题
第15章 应用本地化
15.1本地化资源
15.2配置修饰符
15.2.1可用资源优先级排定
15.2.2多重配置修饰符
15.2.3寻找最匹配的资源
15.3更多资源使用原则及控制
15.3.1资源命名
15.3.2资源目录结构
15.4测试备选资源
第16章 操作栏
16.1选项菜单
16.1.1在XML文件中定义选项菜单
16.1.2创建选项菜单
16.1.3响应菜单项选择
16.2实现层级式导航
16.2.1启用应用图标的导航功能
16.2.2响应向上按钮
16.3可选菜单项
16.3.1创建可选菜单XML文件
16.3.2切换菜单项标题
16.3.3“还有个问题”
16.4挑战练习:用于列表的空视图
第17章 存储与加载本地文件
17.1 CriminalIntent应用的数据存取
17.1.1保存crime数据到JSON文件
17.1.2从文件中读取crime数据
17.2挑战练习:使用外部存储
17.3深入学习:Android文件系统与Java I/O
第18章 上下文菜单与上下文操作模式
18.1定义上下文菜单资源
18.2实施浮动上下文菜单
18.2.1创建上下文菜单
18.2.2为上下文菜单登记视图
18.2.3响应菜单项选择
18.3实施上下文操作模式
18.3.1实现列表视图的多选操作
18.3.2列表视图中的操作模式回调方法
18.3.3改变已激活视图的显示背景
18.3.4实现其他视图的上下文操作模式
18.4兼容性问题:回退还是复制
18.5挑战练习:在CrimeFragment视图中删除crime记录
18.6深入学习:ActionBarSherlock
18.7挑战练习:使用ActionBarSherlock
18.7.1 Criminallntent应用中ABS的基本整合
18.7.2 ABS的深度整合
18.7.3 ABS的完全整合
第19章 相机Ⅰ:取景器
19.1创建Fragment布局
19.2创建CrimeCameraFragment
19.3创建CrimeCameraActivity
19.4使用相机API
19.4.1打开并释放相机
19.4.2 SurfaceView、 Surface-Holder与Surface
19.4.3确定预览界面大小
19.4.4启动CrimeCamera-Activity
19.5深入学习:以命令行的方式运行activity
第20章 相机Ⅱ:拍摄并处理照片
20.1拍摄照片
20.1.1实现相机回调方法
20.1.2设置图片尺寸大小
20.2返回数据给C rimeF ragment
20.2.1以接收返回值的方式启动CrimeCameraActivity
20.2.2在CrimeCameraFragment中设置返回值
20.2.3在CrimeFragment中获取照片文件名
20.3更新模型层
20.3.1新增Photo类
20.3.2为Crime添加photo属性
20.3.3设置photo属性
20.4更新CrimeFragment的视图
20.4.1添加ImageView组件
20.4.2图像处理
20.5在DialogFragment中显示大图片
20.6挑战练习:C rime照片的显示方向
20.7挑战练习:删除照片
20.8深入学习:Android代码的废弃处理
第21章 隐式intent
21.1添加按钮组件
21.2添加嫌疑人信息至模型层
21.3使用格式化字符串
21.4使用隐式intent
21.4.1典型隐式intent的组成
21.4.2发送陋习报告
21.4.3获取联系人信息
21.4.4检查可以响应的activity
21.5挑战练习:又一个隐式intent
第22章Master-Detail用户界面
22.1增加布局灵活性
22.1.1修改SingleFragment-Activity
22.1.2创建包含两个fragment容器的布局
22.1.3使用别名资源
22.2 Activity: fragment的托管者
22.3深入学习:设备屏幕尺寸的确定
第23章 深入学习intent和任务
23.1创建NerdLauncher项目
23.2解析隐式intent
23.3在运行时创建显式intent
23.4任务与后退栈
23.5使用NerdLauncher应用作为设备主屏幕
23.6挑战练习:应用图标与任务重排
23.7进程与任务
第24章 样式与include标签的使用
24.1创建RemoteControl项目
24.1.1编码实现RemoteControl-Activity
24.1.2创建RemoteControl-Fragment
24.2使用样式消除重复代码
24.3完善布局定义
24.4深入学习:使用include与merge标签
24.5挑战练习:样式的继承
第25章XML Drawable与9-Patches
25.1 XML drawable
25.2 state list drawable
25.3 layer list与inset drawable
25.4使用9-patch图像
第26章HTTP与后台任务
26.1创建PhotoGallery应用
26.2网络连接基本
26.3使用AsyncTask在后台线程上运行代码
26.4线程与主线程
26.5获取Flickr XML数据
26.6从AsyncTask回到主线程
26.7深入学习:再探AsyncTask
26.8挑战练习:分页
第27章Looper、 Handler与HandlerTh read
27.1设置GridView以显示图片
27.2批量下载缩略图
27.3与主线程通信
27.4创建并启动后台线程
27.5 Message与message Handler
27.5.1消息的剖析
27.5.2 Handler的剖析
27.5.3使用handler
27.5.4传递handler
27.6深入学习:AsyncTask与Th read
27.7挑战练习:预加载以及缓存
第28章 搜索
28.1搜索Flickr网站
28.2搜索对话框
28.2.1创建搜索界面
28.2.2可搜索的activity
28.2.3物理搜索键
28.2.4搜索的工作原理
28.2.5启动模式与新的intent
28.2.6使用shared preferences实现轻量级数据存储
28.3在Android 3.0以后版本的设备上使用SearchView
28.4挑战练习
第29章 后台服务
29.1创建IntentService
29.2服务的作用
29.3查找最新返回结果
29.4使用AlarmManager延迟运行服务
29.4.1 PendingIntent
29.4.2使用PendingIntent管理定时器
29.5控制定时器
29.6通知信息
29.7深入学习:服务细节内容
29.7.1服务的能与不能
29.7.2服务的生命周期
29.7.3 non-sticky服务
29.7.4 sticky服务
29.7.5绑定服务
第30章broadcast Intent
30.1随设备重启而重启的定时器
30.1.1配置文件中的broadcastreceiver
30.1.2如何使用receiver
30.2过滤前台通知消息
30.2.1发送broadcast intent
30.2.2动态broadcast receiver
30.2.3使用私有权限
30.2.4使用ordered broadcast接收结果
30.3 receiver与长时运行任务
第31章 网页浏览
31.1最后一段Flickr数据
31.2简单方式:使用隐式intent
31.3较难方式:使用WebView
31.3.1使用WebChromeClient优化WebView的显示
31.3.2处理WebView的设备旋转问题
31.4深入学习:注入JavaScript对象
第32章 定制视图与触摸事件
32.1创建DragAndDraw项目
32.1.1创建DragAndDraw-Activity
32.1.2创建DragAndDraw-Fragment
32.2创建定制视图
32.3处理触摸事件
32.4 onDraw(...)方法内的图形绘制
32.5挑战练习:设备旋转问题
第33章 跟踪设备的地理位置
33.1启动RunTracker项目
33.1.1创建RunActivity
33.1.2创建RunFragment
33.2地理位置与LocationManager
33.3接收定位数据更新broadcast
33.4使用定位数据刷新UI显示
33.5快速定位:最近一次地理位置
33.6在物理和虚拟设备上测试地理位置定位
第34章 使用SQLite本地数据库
34.1在数据库中存储旅程和地理位置信息
34.2查询数据库中的旅程列表
34.3使用CursorAdapter显示旅程列表
34.4创建新旅程
34.5管理现有旅程
34.6挑战练习:识别当前跟踪的旅程
第35章 使用Loader加载异步数据
35.1 Loader与LoaderManager
35.2在RunTracker应用中使用Loader
35.3加载旅程列表
35.4加载单个旅程
35.5加载旅程的最近一次地理位置
第36章 使用地图
36.1添加Maps API给RunTracker应用
36.1.1使用物理设备测试地图
36.1.2安装使用Google Playservices SDK
36.1.3获取Google Maps API key
36.1.4更新RunTracker应用的manifest配置文件
36.2在地图上显示用户的地理位置
36.3显示旅程路线
36.4为旅程添加开始和结束地图标注
36.5挑战练习:实时数据更新
第37章 编后语
37.1终极挑战
37.2关于我们
37.3致谢