第1章 初识Android 1
1.1 Android是什么 1
1.2 Android体系架构 1
1.3 Android发展史 4
第2章 选择您的开发工具 5
2.1 准备软件,认识Android Studio 5
2.1.1 什么是Android Studio 5
2.1.2 为什么使用Android Studio 6
2.2 安装Android Studio 6
2.2.1 安装配置要求 6
2.2.2 下载地址 6
2.2.3 安装JDK 7
2.2.4 安装Android Studio 7
2.2.5 设置JDK和Android SDK
目录 14
2.3 项目的创建 16
2.3.1 创建项目的步骤 16
2.3.2 解决错误(没有错误最好) 19
2.4 Android Studio界面预览 21
2.5 常用设置 22
2.5.1 设置主题 22
2.5.2 设置字体和格式 22
2.5.3 设置文件编码 24
2.5.4 设置快捷键 24
2.5.5 其他设置 26
2.6 常用快捷键 26
2.7 Android工程目录 27
2.7.1 工程目录介绍 27
2.7.2 Gradle使用详解 28
2.7.3 app/build.gradle 28
2.8 SDK目录介绍 30
2.9 调试程序 31
2.9.1 创建模拟器 31
2.9.2 连接真实手机 33
2.9.3 Genymotion模拟器 34
2.10 程序启动分析 34
2.11 日志和注释 36
2.11.1 注释 37
2.11.2 日志 37
2.11.3 设置Android Studio日志
显示颜色 38
2.11.4 实际开发中控制日志 39
2.11.5 Logger的使用 41
总结 42
第3章 界面的搭建 43
3.1 眼见皆View 43
3.2 布局的搭建方式 43
3.3 常用的控件和属性 44
3.3.1 TextView 44
3.3.2 Button 45
3.3.3 EditText 46
3.3.4 ImageView 47
3.3.5 ProgressBar 49
3.4 布局的介绍 50
3.4.1 LinearLayout(线性布局) 50
3.4.2 RelativeLayout(相对布局) 52
3.4.3 FrameLayout(帧布局) 55
3.4.4 GridLayout(网格布局) 56
3.4.5 CoordinatorLayout 58
3.4.6 ConstraintLayout(约束
布局) 61
3.5 提示信息Toast和Snackbar 61
3.5.1 Toast使用详解 61
3.5.2 修改Toast位置 63
3.5.3 自定义Toast布局 63
3.5.4 避免内存泄露 65
3.5.5 Snackbar 65
3.6 点击事件三种写法 68
3.6.1 通过匿名内部类或内部类
实现 68
3.6.2 让类实现接口 69
3.6.3 在布局文件中注册事件 70
3.7 使用Lambda表达式代替匿名
内部类 70
3.7.1 什么是lambda呢 70
3.7.2 使用Lambda表达式 71
3.8 AlertDialog提示对话框 73
3.8.1 一般对话框 75
3.8.2 Material Design风格的
对话框 76
3.8.3 列表对话框 78
3.8.4 单选按钮对话框 79
3.8.5 多选按钮对话框 79
3.8.6 自定义AlertDialog 80
3.9 ProgressDialog 81
总结 83
第4章 Activity介绍 84
4.1 Activity之间的跳转 84
4.1.1 显示意图 84
4.1.2 隐式意图 86
4.1.3 隐式意图的常见操作 88
4.1.4 IntentFilter匹配规则 89
4.2 Activity之间传递数据 92
4.2.1 通过Intent传递数据 92
4.2.2 静态工厂设计模式传递
数据 93
4.2.3 返回数据给之前的Activity 93
4.3 Android 6.0权限的管理 95
4.3.1 Android 6.0新的权限机制 96
4.3.2 申请权限 96
4.3.3 第三方库RxPermissions 100
4.4 Activity生命周期 101
4.4.1 生命周期的方法 101
4.4.2 Activity销毁时保存数据 102
4.4.3 锁定横竖屏 103
4.4.4 开发时注意事项 104
4.5 Activity任务栈 104
4.6 Activity启动模式 105
4.6.1 standard 105
4.6.2 singleTop 106
4.6.3 singleTask 106
4.6.4 singleInstance 107
4.6.5 统一管理Activity 108
4.7 Toolbar和Navigation Drawer 109
4.7.1 AppBar的简介 109
4.7.2 创建菜单 111
4.7.3 Toolbar 112
4.7.4 Toolbar遇上Navigation
Drawer 114
4.8 主题样式设置 118
总结 120
第5章 数据存储 121
5.1 SharedPreference 121
5.2 MD5加密 123
5.3 文件存储数据 124
5.3.1 保存到手机内存(Internal
Storage) 124
5.3.2 SD卡存储(External
Storage) 127
5.4 SQLite存储 132
5.4.1 创建数据库 132
5.4.2 升级数据库 135
5.4.3 数据库增删改查(CURD) 137
5.4.4 SQLite数据库的事务操作 144
5.5 常见的数据库框架 146
总结 146
第6章 网络编程 148
6.1 HTTP协议 148
6.1.1 URL简介 148
6.1.2 HTTP简介 149
6.1.3 GET和POST对比 151
6.2 HttpURLConnection 151
6.2.1 为什么废弃HttpClient 151
6.2.2 使用HttpURLConnection
联网 152
6.3 多线程编程 154
6.3.1 线程的同步和异步 154
6.3.2 AsycTask 158
6.3.3 RxJava 161
6.4 网络请求实例 164
6.5 JSON解析 168
6.5.1 使用Android原生方式解析
JSON 169
6.5.2 Gson的使用 170
6.5.3 插件GsonFormat快速实现
JavaBean 174
6.5.4 完成请求实例 176
6.6 网络请求框架——Retrofit 179
6.6.1 使用Retrofit 179
6.6.2 常用的注解 181
6.6.3 完成请求案例 181
6.6.4 RxJava和Retrofit结合 183
6.7 WebView 184
6.7.1 WebView配置 186
6.7.2 WebViewClient方法 187
6.7.3 设置WebChromeClient 189
6.7.4 WebView常用的方法 190
6.7.5 WebView模板代码 191
总结 196
第7章 图片的处理 197
7.1 Bitmap和Drawable 197
7.2 大图的加载 199
7.3 图片加水印 202
7.4 图片特效,Matrix 205
7.4.1 缩放 205
7.4.2 倒影、镜面 207
7.4.3 旋转 208
7.4.4 位移 208
7.5 图片颜色处理——打造自己的美图
秀秀 209
7.5.1 颜色过滤器
ColorMatrixColorFilter 209
7.5.2 实现图片美化功能 210
7.6 案例——随手涂鸦 214
7.7 加载网络图片 217
7.7.1 网络图片的缓存策略 217
7.7.2 图片加载库Picasso的使用 218
总结 219
第8章 复杂控件的使用 220
8.1 ListView 220
8.1.1 初识ListView 221
8.1.2 定制ListView条目的界面 222
8.1.3 优化ListView 225
8.1.4 ListView的点击事件 226
8.1.5 ListView常用的属性 228
8.2 GridView 229
8.3 RecyclerView 231
8.3.1 初识RecyclerView 231
8.3.2 使用RecyclerView 232
8.3.3 不同的布局排列方式 234
8.3.4 RecyclerView添加点击
事件 236
8.3.5 RecyclerView添加删除
数据 237
8.3.6 下拉刷新
SwipeRefreshLayout 237
8.4 CardView 239
8.5 ViewPager 241
8.6 BottomNavigationView(底部
导航) 243
8.7 TabLayout 246
8.7.1 TabLayout使用 246
8.7.2 TabLayout自定义条目
样式 249
总结 250
第9章 探索Fragment 251
9.1 使用Fragment 252
9.1.1 Fragment的生命周期 252
9.1.2 创建Fragment 252
9.1.3 向Activity添加Fragment 254
9.1.4 管理片段 256
9.1.5 Fragment的向下兼容 257
9.2 FragmentTabHost实现底部标签 257
9.3 ViewPager和Fragment结合 259
总结 273
第10章 广播接收者 274
10.1 广播简介 274
10.2 实现一个BroadcastReceiver 275
10.3 发送自定义广播 279
10.4 桌面快捷方式 283
总结 285
第11章 Service介绍 286
11.1 服务的基本用法 286
11.1.1 创建服务 286
11.1.2 启动和停止服务 287
11.1.3 绑定服务 289
11.1.4 服务的生命周期 292
11.2 IntentService 292
11.3 Service和BroadCastReceiver结合
使用的案例(兼容Android 7.0) 294
11.3.1 Android 7.0错误原因 297
11.3.2 使用FileProvider 298
总结 300
第12章 动画 301
12.1 补间动画(Tween Animation) 301
12.2.1 AlphaAnimation(透明度
动画) 302
12.2.2 ScaleAnimation(缩放
动画) 304
12.2.3 TranslateAnimation(平移
动画) 305
12.2.4 RotateAnimation(旋转
动画) 306
12.2 逐帧动画(Frame Animation) 308
12.3 属性动画 310
总结 313
第13章 新特性 314
13.1 Android 7.0分屏开发 314
13.1.1 如何分屏呢 315
13.1.2 多窗口生命周期 315
13.1.3 针对多窗口进行配置 316
13.1.4 多窗口模式中运行应用
注意事项 316
13.1.5 在多窗口模式中启动新
Activity 317
13.1.6 支持拖放 318
13.2 Android 7.0快速设定 318
13.3 约束布局ConstraintLayout 321
13.3.1 ConstraintLayout简介 321
13.3.2 添加约束布局 322
13.3.3 使用约束布局 322
13.3.4 添加约束 323
13.3.5 使用自动连接和约束推断 325
13.3.6 快速对齐Align 326
13.4 使用Kotlin语言开发Android 326
总结 330
第14章 性能优化 331
14.1 性能检测 331
14.1.1 检测内存泄露 331
14.1.2 LeakCanary 334
14.1.3 追踪内存分配 335
14.1.4 查询方法执行的时间 335
14.2 过度绘制(OverDraw) 336
14.2.1 过度绘制概念 336
14.2.2 追踪过度绘制 336
14.2.3 去掉不合理背景 337
14.2.4 不合理的XML布局对
绘制的影响 338
14.3 避免ANR 338
14.3.1 ANR分析 339
14.3.2 ANR解决方式 341
总结 341
第15章 屏幕适配 342
15.1 Android屏幕适配出现的原因 342
15.2 相关重要概念 344
15.2.1 屏幕尺寸 344
15.2.2 屏幕分辨率 344
15.2.3 屏幕像素密度 344
15.2.4 屏幕尺寸、分辨率、像素
密度三者关系 344
15.2.5 dip 345
15.2.6 sp 345
15.3 尺寸适配解决方案 346
15.3.1 “布局”适配 346
15.3.2 尺寸(size)限定符 347
15.3.3 最小宽度(Smallest-width)
限定符 348
15.3.4 使用布局别名 349
15.3.5 屏幕方向(Orientation)
限定符 350
15.3.6 “布局组件”匹配 352
15.3.7 Layout_weight详解 352
15.3.8 “图片资源”匹配 355
15.3.9 .9的制作 355
15.3.10 “用户界面流程”匹配 357
15.4 屏幕密度适配 359
15.4.1 “布局控件”适配 359
15.4.2 百分比布局 360
15.4.3 约束布局 362
总结 362
第16章 自定义控件 363
16.1 自定义控件简介 363
16.2 View的生命周期 364
16.2.1 构造函数 365
16.2.2 onAttachedToWindow 369
16.2.3 onMeasure 370
16.2.4 onLayout 372
16.2.5 onDraw 372
16.2.6 View更新 373
16.2.7 动画 374
总结 374
第17章 JNI/NDK开发 375
17.1 NDK配置(最新的CMake
方式) 375
17.1.1 下载 376
17.1.2 创建项目 376
17.1.3 运行项目 378
17.1.4 手动添加native方法 379
总结 380
第18章 开发一个真实的项目 381
18.1 项目需求分析 381
18.2 创建项目 382
18.3 界面实现 383
18.3.1 启动界面 383
18.3.2 引导页面 385
18.3.3 主界面 388
18.3.4 列表界面 390
18.4 请求网络 395
18.5 新闻列表和详情 400
18.6 完成整个项目 409
总结 412
· · · · · · (
收起)