《Head First Android开发 第2版》PDF下载

  • 购买积分:23 如何计算积分?
  • 作  者:(美)Dawn Griffiths,(美)David Griffiths
  • 出 版 社:北京:中国电力出版社
  • 出版年份:2018
  • ISBN:9787519821500
  • 页数:888 页
图书介绍:如果你有一个很好的想法,要开发一流的Android应用,本书这一版经过充分修订和更新,会帮你用最快的速度构建你的第一个实用应用。你会学到一些实践技巧,掌握如何建立应用的结构,设计灵活的交互式界面,在后台运行服务,让你的应用同时适用于手机和平板电脑,以及很多其他方面。就像有一位富有经验的Android开发人员坐在你旁边!你只需要对Java有一些了解就能轻松地学习这本书。

1入门 投身新领域 2

欢迎来到Android世界 2

Android平台剖析 3

我们要做的工作 4

你的开发环境 5

安装Android Studio 6

构建一个基本应用 7

如何构建应用 8

活动和布局概览 12

如何构建应用(续) 13

你已经创建了你的第一个Android应用 15

Android Studio会为你创建一个完整的文件夹结构 16

工程中的有用文件 17

用Android Studio编辑器编辑代码 18

在Android模拟器上运行应用 23

创建Android虚拟设备 24

在模拟器中运行应用 27

可以在控制台上查看进度 28

发生了什么 30

改进应用 31

布局里有什么 32

activity_main.xml包含两个元素 33

更新布局中显示的文本 34

试一试应用 35

你的Android工具箱 36

2构建交互式应用 真正有用的应用 38

构建一个啤酒荐酒师应用 38

创建工程 40

我们已经创建了默认活动和布局 41

详细介绍设计编辑器 42

使用设计编辑器增加一个按钮 43

activity_find_beer.xml有一个新按钮 44

仔细查看布局代码 45

试一试应用 49

硬编码文本很难实现本地化 50

创建字符串资源 51

在布局中使用字符串资源 52

activity_find_beer.xml的代码 53

向spinner增加值 56

向strings.xml增加string-array 57

试一试spinner 58

需要让按钮做些事情 59

让按钮调用一个方法 60

活动代码 61

为活动增加onClickFindBeer()方法 62

onClickFindBeer()需要做些什么 63

一旦有了View,就能访问它的方法 64

更新活动代码 65

活动的第一个版本 67

这些代码做什么 68

构建定制Java类 70

运行代码时发生了什么 74

试一试应用 75

你的Android工具箱 76

3多个活动和意图 说出你的意图 78

应用可以包含多个活动 78

应用结构 79

开始吧:创建工程 79

更新布局 80

创建第二个活动和布局 82

认识Android清单文件 84

意图是一个消息类型 86

运行应用时会发生什么 88

向第二个活动传递文本 90

更新文本视图属性 91

putExtra()在意图中增加额外的信息 92

更新CreateMessageActivity代码 95

让ReceiveMessageActivity使用意图中的信息 96

用户单击Send Message按钮时发生了什么 97

可以修改应用向其他人发送消息 98

Android应用如何工作 99

创建意图指定一个动作 101

修改意图来使用动作 102

Android如何使用意图过滤器 106

如果总是想让用户选择活动该怎么做 112

调用createChooser()时发生了什么 113

修改代码创建选择器 115

你的Android工具箱 118

4活动生命周期 活动的一生 120

活动到底如何工作 120

秒表应用 122

增加字符串资源 123

活动代码如何工作 125

为按钮增加代码 126

runTimer()方法 127

完整的runTimer()代码 129

完整的StopwatchActivity代码 130

旋转屏幕会改变设备配置 136

活动的状态 137

活动生命周期:从创建到撤销 138

更新的StopwatchActivity代码 142

运行应用时发生了什么 143

活动的生命中不只是有创建和撤销 146

更新的StopwatchActivity代码 151

运行应用时会发生什么 152

不过如果应用只是部分可见会怎么样 154

活动生命周期:前台生命期 155

如果活动暂停就停止秒表 158

实现onPause()和onResume()方法 159

完整的活动代码 160

运行应用时发生了什么 163

生命周期方法快速指南 167

你的Android工具箱 168

5视图和视图组 享受视图 170

用户界面由布局和GUI组件组成 170

LinearLayout将视图显示在一行或一列中 171

增加尺寸资源文件为不同布局指定一致的内边距 174

使用外边距增加视图间的距离 176

调整基本线性布局 177

增加权重扩展视图 179

android:gravity属性的可用值 183

完整的线性布局代码 186

帧布局叠放视图 188

为工程增加一个图像 189

嵌套布局的完整代码 192

FrameLayout:小结 193

使用视图 201

可编辑文本视图 202

开关按钮 204

开关 205

复选框 206

单选钮 208

Spinner 210

图像视图 211

为按钮增加图像 213

滚动视图 215

toast 216

你的Android工具箱 220

6约束布局 集中在一起 222

嵌套布局可能效率很低 222

引入约束布局 223

确保你的工程包含约束布局库 224

向strings.xml增加字符串资源 225

使用蓝图工具 226

使用约束指定视图位置 227

增加一个垂直约束 228

对蓝图的改变会反映到XML中 229

如何让视图居中 230

通过更新偏差调整视图的位置 231

如何改变视图的大小 232

如何对齐视图 238

建立一个真正的布局 239

首先,增加上面一行视图 240

推导约束特性会猜测要增加哪些约束 241

为蓝图增加下一行…… 242

最后,为消息增加一个视图 243

试一试应用 244

你的Android工具箱 245

7列表视图和适配器 合理组织 248

所有应用都从想法开始 248

使用ListView导航到数据 251

饮料详细信息活动 253

Starbuzz应用结构 254

Drink类 256

顶级布局包含一个图像和一个列表 258

完整的顶级布局代码 260

利用监听器让列表视图响应单击 261

为列表视图设置监听器 262

类别活动显示一个类别的数据 267

更新activity_drink_category.xml 268

非静态数据要使用适配器 269

用数组适配器连接列表视图和数组 270

为DrinkCategory Activity增加数组适配器 271

应用回顾:我们做了哪些工作 274

如何在TopLevelActivity中处理单击 276

完整的DrinkCategory Activity代码 278

用数据更新视图 281

DrinkActivity代码 283

运行应用时发生了什么 284

你的Android工具箱 288

8支持库和应用条 走捷径 290

好应用都有清晰的结构 290

不同类型的导航 291

应用主题来增加应用条 293

创建披萨应用 295

增加v7 AppCompat支持库 296

AndroidManifest.xml可以改变应用条的外观 299

如何应用主题 300

在样式资源文件中定义样式 301

定制应用的外观 303

在颜色资源文件中定义颜色 304

activity_main.xml的代码 305

ActionBar与Toolbar比较 306

在活动布局中包含工具条 312

为应用条增加动作 315

增加标签来改变应用条文本 318

AndroidManifest.xml的代码 319

控制动作的外观 322

完整的MainActivity.java代码 325

启用向上导航 327

在应用条上共享内容 331

为menu_ main.xml增加一个共享动作提供者 332

用意图指定内容 333

完整的MainActivity.java代码 334

你的Android工具箱 337

9片段 模块化 340

你的应用在所有设备上都要表现良好 340

应用可能还要有不同的行为 341

片段支持重用代码 342

应用的手机版本 343

创建工程和活动 345

为MainActivity的布局增加一个按钮 346

如何向工程增加片段 348

片段的onCreateView()方法 350

向活动布局增加片段 352

让片段与活动交互 359

Workout类 360

向片段传递训练项目ID 361

让活动设置训练项目ID 363

片段生命周期 365

在片段的onStart()方法中设置视图的值 367

如何创建列表片段 374

更新的WorkoutListFragment代码 377

activity_main.xml的代码 381

连接列表和详细信息 384

WorkoutListFragment.java的代码 387

MainActivity需要实现接口 388

DetailActivity需要向WorkoutDetailFragment传递ID 389

你的Android工具箱 392

10面向更大界面的片段 不同大小,不同界面 394

Workout用在手机和平板电脑上看上去是一样的 394

面向更大界面的设计 395

应用的手机版本 396

应用的平板电脑版本 397

创建一个平板电脑AVD 399

将屏幕特定资源放在屏幕特定文件夹中 402

不同的文件夹选项 403

平板电脑使用layout-large文件夹中的布局 408

更新后的代码会做什么 410

我们要修改itemClicked()代码 412

希望片段处理后退按钮 413

认识后退堆栈 414

后退堆栈事务并不只是活动 415

通过编程使用帧布局替换片段 416

利用布局差别区分设备使用的布局 417

修改后的MainActivity代码 418

使用片段事务 419

更新的MainActivity代码 423

旋转平板电脑时应用会出问题 427

(再谈)保存活动的状态 428

更新的WorkoutDetailFragment.java代码 430

你的Android工具箱 432

11动态片段 嵌套片段 434

增加动态片段 434

应用的新版本 436

创建TempActivity 437

TempActivity需要扩AppCompatActivity 438

StopwatchFragment.java的代码 444

StopwatchFragment布局 447

将StopwatchFragment增加到TempActivity的布局 449

onClick属性调用活动中的方法,而不是片段的方法 452

将OnClickListener关联到按钮 457

StopwatchFragment代码 458

旋转设备会重置秒表 462

对静态片段使用〈fragment〉…… 463

修改activity_temp.xml来使用FrameLayout 464

TempActivity.java的完整代码 467

为WorkoutDetailFragment增加秒表 469

完整的WorkoutDetailFragment.java代码 476

你的Android工具箱 480

12设计支持库 向右滑动 482

再来看披萨应用 482

应用结构 483

使用视图分页控件在片段间滑动 489

为MainActivity的布局增加一个视图分页控件 490

使用片段分页控件适配器让视图分页控件了解页面 491

片段分页控件适配器的代码 492

完整的MainActivity java代码 494

为MainActivity增加标签页导航 498

如何向布局增加标签页 499

将标签页布局关联到视图分页控件 501

完整的MainActivity.java代码 502

设计支持库帮助你实现材料设计 506

让工具条响应滚动 508

向MainActivity的布局增加一个协调器布局 509

如何协调滚动行为 510

为TopFragment增加可滚动的内容 512

完整的fragment_top.xml代码 515

向OrderActivity增加折叠工具条 517

如何创建一个普通的折叠工具条 518

如何为折叠工具条增加图像 523

更新后的activity_order.xml代码 524

FAB和snackbar 526

更新后的activity_order.xml代码 528

完整的OrderActivity.java代码 533

你的Android工具箱 535

13回收视图和卡片视图 回收 538

披萨应用还有工作要做 538

回收视图概览 539

增加披萨数据 541

在卡片中显示披萨数据 542

如何创建卡片视图 543

完整的card captioned_image.xml代码 544

增加回收视图适配器 546

定义适配器的视图持有者 548

覆盖onCreateViewHolder()方法 549

为卡片视图增加数据 550

完整的CaptionedImagesAdapterjava代码 551

创建回收视图 553

为PizzaFragment的布局增加RecyclerView 554

完整的PizzaFragment.java代码 555

回收视图使用一个布局管理器排列视图 556

指定布局管理器 557

完整的PizzaFragment.java代码 558

让回收视图响应单击 566

创建PizzaDetailActivity 567

PizzaDetailActivity.java的代码 569

让回收视图响应单击 570

可以从适配器监听视图事件 571

使你的适配器可重用 572

为适配器增加接口 573

PizzaFragment.java中实现监听器 575

你的Android工具箱 578

14导航抽屉 周游世界 580

标签页布局允许用户轻松导航…… 580

我们要为一个新email应用创建一个导航抽屉 581

导航抽屉解析 582

创建CatChat工程 584

创建InboxFragment 585

创建DraftsFragment 586

创建SentItemsFragment 587

创建TrashFragment 588

创建一个工具条布局 589

更新应用的主题 590

创建HelpActivity 591

创建FeedbackActivity 592

创建导航抽屉头部 594

完整的nav header.xml代码 595

如何分组 598

把支持区段增加为一个子菜单 600

完整的menu nav.xml代码 601

如何创建导航抽屉 602

完整的activity_main.xml代码 603

为MainActivity的帧布局增加InboxFragment 604

增加抽屉开关 607

用户点击抽屉中的菜单项时做出响应 608

实现onNavigationItemSelected()方法 609

用户按后退按钮时关闭抽屉 614

完整的MainActivity.java代码 615

你的Android工具箱 619

15SQLite数据库 启动数据库 622

再来看Starbuzz 622

Android使用SQLite数据库持久存储数据 623

Android提供了一些SQLite类 624

当前的Starbuzz应用结构 625

修改应用来使用数据库 626

SQLite帮助器管理数据库 627

创建SQLite帮助器 628

SQLite数据库内部 630

使用结构化查询语言(SQL)创建表 631

使用insert()方法插入数据 632

插入多个记录 633

StarbuzzDatabaseHelper代码 634

SQLite帮助器代码会做什么 635

如果想要修改数据库呢? 636

SQLite数据库有一个版本号 637

改变版本号时会发生什么 638

用onUpgrade()升级数据库 640

用onDowngrade()降级数据库 641

下面来升级数据库 642

升级现有的数据库 645

用update()方法更新记录 646

对多个列应用条件 647

修改数据库结构 649

删除表 650

完整的SQLite帮助器代码 651

你的Android工具箱 656

16基本游标 取出数据 658

目前为止完成的工作…… 658

Starbuzz应用的新结构 659

如何修改DrinkActivi来使用Starbuzz数据库 660

目前的DrinkActivity代码 661

得到数据库引用 662

用游标从数据库获取数据 663

从一个表返回所有记录 664

以特定顺序返回记录 665

返回选择的记录 666

到目前为止的DrinkActivity代码 669

要从游标读取记录,首先需要导航到这个记录 670

导航游标 671

获取游标值 672

DrinkActivity代码 673

目前为止完成的工作 675

目前的DrinkCategoryActivity代码 677

得到Starbuzz数据库的一个引用…… 678

如何替换列表视图中的数组数据? 679

简单游标适配器将游标数据映射到视图 680

如何使用简单游标适配器 681

关闭游标和数据库 682

未完,继续 683

修改后的DrinkCategory Activity代码 688

DrinkCategory Activity代码(续) 689

你的Android工具箱 691

17游标与asynctasks 保持在后台 694

我们希望Starbuzz应用更新数据库数据 694

向DrinkActivity的布局增加一个复选框 696

显示FAVORITE列的值 697

响应单击事件来更新数据库 698

完整的DrinkActivity.java代码 701

在TopLevelActivity中显示用户的最爱 705

重构TopLevelActivity.java 707

新的TopLevelActivity.java代码 710

用changeCursor()改变游标 715

哪些代码在哪个线程中运行? 723

AsyncTask完成异步任务 724

onPreExecute()方法 725

doInBackground()方法 726

onProgressUpdate()方法 727

onPostExecute()方法 728

AsyncTask类 729

完整的UpdateDrinkTask类 730

完整的DrinkActivity java代码 732

你的Android工具箱 737

AsyncTask步骤小结 737

18启动式服务 愿意为您效劳 740

服务在后台工作 740

创建一个启动式服务 741

使用IntentService类创建一个基本启动式服务 742

如何记录消息日志 743

完整的DelayedMessageService代码 744

在AndroidManifest.xml中声明服务 745

为activity_main.xml增加一个按钮 746

使用startService()启动服务 747

启动式服务的状态 750

启动式服务生命周期:从创建到撤销 751

服务继承了生命周期方法 752

Android有一个内置的通知服务 755

我们将使用AppCompat支持库的通知 756

创建一个通知生成器 757

使用内置通知服务发出通知 759

完整的DelayedMessageService.java代码 760

你的Android工具箱 765

19绑定式服务和权限 绑定在一起 768

绑定式服务绑定到其他组件 768

创建一个新服务 770

实现一个绑定器 771

为服务增加一个getDistance()方法 772

更新MainActivity的布局 773

创建一个ServiceConnection 775

使用bindService()绑定服务 778

使用unbindService()与服务解除绑定 779

调用OdometerService的getDistance()方法 780

完整的MainActivity java代码 781

绑定式服务的状态 787

增加AppCompat支持库 790

为OdometerService增加位置监听器 792

更新的OdometerService代码 795

计算走过的距离 796

完整的OdometerService.java代码 798

让应用请求权限 802

检查用户对权限请求的响应 805

将通知代码增加到onRequestPermissionsResults() 809

完整的MainActivity.java代码 811

你的Android工具箱 815

很高兴你能来到Android世界 816

1.发布你的应用 862

2.内容提供者 863

3.加载器 864

4.同步适配器 864

5.广播 865

6.WebView类 866

7.设置 867

8.动画 868

9.APP部件 869

10.自动测试 870