自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 资源 (2)
  • 收藏
  • 关注

原创 解决ConstraintLayout布局时候TextView左边有控件之后设置TextView宽度为wrap_content时,文字会超出屏幕的问题

问题:<TextView android:id="@+id/tv_answer_content_item_answer" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/dp_10" android:layout_marginTop="@dim.

2021-07-08 10:38:44 1672

原创 service与IntentService以及Thread的区别

Service缺陷:1.不会启动专门的一条线程, service和他所在的应用位于同一进程中2.servi也不是专门一条新线程, 不应该在service中直接处理耗时的任务IntentService特征:1.创建独立的worker线程来处理所有的intent请求2.创建独立的worker线程来处理onHandleIntent()方法实现的代码,无需处理多线程问题3.所有请求处理完成后,intentservice会自动停止,无需调用stopself()方法停止service4.为s

2021-07-02 14:57:14 290

原创 kotlin自定义一个简单的CircleView

1.自定义CircleView继承自Viewpackage com.example.myapplication.widgetimport android.content.Contextimport android.content.res.TypedArrayimport android.graphics.Canvasimport android.graphics.Colorimport android.graphics.Paintimport android.util.Attribu.

2021-07-01 11:53:53 281

原创 AsyncTask.横竖屏切换时Activity的生命周期变化

1.横竖屏切换时Activity的生命周期变化。onPause-&gt;onSaveInstanceState-&gt;onStop-&gt;onDestory --------第一阶段-&gt;onCreate-&gt;onStart-&gt;onRestoreInstanceState-&gt;onResume -------第二阶段2.AsyncTask使用方法三个参数Params:表示后...

2021-04-28 23:32:03 97

原创 进程和线程理论知识

1.进程与线程一个进程包含多个线程,线程之间共享进程的资源,进程去找操作系统(OS)去申请内存,进程把申请到的内存分派给线程来使用线程是cpu调度的最小单位CPU核心数和线程数的关系:1:2,四核对应8个逻辑处理器,意味着可以同时跑8个线程,但是为什么我们的pc没有运行八个逻辑处理器(线程)就卡死呢,就是因为CPU的时间片轮转机制CPU时间片轮转机制2.并行与并发并行并发:并发的概念一定要有时间单位,时间单位内执行了多少任务多线程的好处:充分利用CPU资源,加快响应用户所用

2021-04-28 23:25:26 83

原创 一个简单的Retrofit实现(注解+动态代理)

项目整体结构自定义WeatherApi类package com.example.lsn_compose.BarryLRetrofit.api;import com.example.lsn_compose.BarryLRetrofit.retrofit.annotation.Field;import com.example.lsn_compose.BarryLRetrofit.retrofit.annotation.GET;import com.example.lsn_compose.B.

2021-04-28 17:03:30 212

原创 关于“The application could not be installed: INSTALL_FAILED_TEST_ONLY“的解决办法

在as项目的gradle.propertity文件中添加:android.injected.testOnly=false

2021-04-26 12:23:45 342

原创 Retrofit+RxJava原理浅析

Retrofit: 核心:返回一个对象 new ISharedListService()动态代理:代理所有的。动态生成一个类:一个你对应的.class文件的对象–>反射 代理的是一个object。看不见的类:代理类拓展类的行为和静态的是一样的 主要方法: invoke。所有对接口类型的方法的调用都会执行到invoke方法里面代理对象在内存中,而不在外存中。看不见的。所有对接口的调用都会去执行到代理类的invoke函数中。一旦访问到了invoke,就形成了一个功能的拦截获取到你所有.

2021-04-23 15:54:01 486

原创 注解和反射的初步应用

元注解注解上的注解:表示朱姐可以用在Java中的任何元素上,诸如:包名,类名,方法名,参数名,成员变量名import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target(ElementType.TYPE)//元注解:注解上的注解@R

2021-04-22 16:27:24 61

原创 ConstraintLayout使用大全

API28文档中的ConstraintLayout相关介绍1.为什么要使用ConstraintLayout在多层LinearLayout嵌套(超过三层)之后,视图的渲染与解析会拖累应用的性能,以往我们会选择使用RelativeLayout,但是如果视图层复杂的话RelativeLayout里面还需要嵌套其他视图,对视图的位置控制起来很麻烦,也不容易进行屏幕适配。所以我们使用ConstraintLayout。因为ConstraintLayout使用起来比RelativeLayout更灵活,性能也更加.

2021-04-16 15:51:42 689

原创 Android Studio 提示“你的主机中的软件中止了一个已建立的连接”问题解决方法

Android Studio在Gradle sync、build、Clean、Rebuild、Run时,提示 “你的主机中的软件中止了一个已建立的连接.”解决方案1如果你是通过第三方软件连接的真机,比如:豌豆荚、应用宝、应用助手等等,那么这种解决方式适合你Win+R , 输入cmd, 输入 netstat -ano|findstr “5037”最后一列就是占用5037端口的进程的PID接着我们Ctrl+Alt+delete进入任务管理器,然后进去详细信息,去PID里面寻找所对应的进程然后把

2021-04-14 11:11:29 3506 3

原创 kolint版本流式布局FlowLayout

流式布局FlawLayout自定义viewpackage com.example.lsn_compose.viewimport android.annotation.SuppressLintimport android.content.Contextimport android.util.AttributeSetimport android.view.Viewimport android.view.ViewGroupimport androidx.core.view.childrenimp

2021-04-14 10:49:24 986 1

原创 泛型

泛型编译时类型安全检测机制该机制允许程序员在编译时检测到非法的类型本质:参数类型–>所操作的数据类型被指定为一个参数泛型不存在于JVM虚拟机虚拟机在运行期进行检测,如果有异常,就会报异常CastNotException,而泛型将类型检测提前到了编译期作用:增强编译时错误检测,减少因类型问题引发的运行时异常泛型具有更强的类型检测避免类型转换泛型算法,增加代码复用性类、接口、方法//类public class Student<T>{ private T t;

2021-04-12 17:05:52 61

原创 c语言free相关以及字符串数组

if(new_arr){//重新开启的堆空间是成功的 free(new_arr); new_arr = NULL;//为了不出现悬空指针}else{//失败 free(arr); arr = NULL;}free只是清空堆空间,必须将指针指向NULL,不然会chuan变成悬空指针。字符串数组:遇到 ‘\0’’ 才结束,可以改变单个字符的值字符串指针:结尾默认添加 ‘\0’,不能修改单个字符的值,会崩溃------>崩溃的原理:数组在栈区持有静态区域的字符串的拷贝,直接修改的

2021-04-09 10:17:11 1167

原创 关于LitePal插入数据重复的问题解决

其实思路很简单,在你每次保存数据之前,先查询数据库判断该数据是否在数据库中已经存在,如果已经存在和将要存储的数据相同的数据,就对数据库中的数据进行删除,然后再保存该数据,这样就不会有重复的数据。下面给一下代码:Litepal给出的查询操作有三种:1.Song song = LitePal.find(Song.class, id);2.List<Song> allSongs...

2019-05-10 14:34:06 2015

原创 AndroidStudio更新至3.3后variantOutput.getPackageApplication()警告的解决办法

今天更新到Android Studio 3.3后,对应的gradle tools也更新到了3.3.0 dependencies { classpath 'com.android.tools.build:gradle:3.3.0' classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.13'...

2019-01-23 16:35:20 8245

原创 如何使用ConstraintLayout

 API28文档中的ConstraintLayout相关介绍1.在多层LinearLayout嵌套(超过三层)之后,视图的渲染会拖累应用的性能,以往我们会选择使用RelativeLayout,但是如果视图层复杂的话RelativeLayout里面还需要嵌套其他视图,对视图的位置控制起来很麻烦,也不容易进行屏幕适配。所以我们使用ConstraintLayout。因为ConstraintLay...

2019-01-22 23:35:36 207

原创 Android开发之弹出菜单

PopupMenu.OnMenuItemClickListener主要有两个公用方法:1. public static interface PopupMenu.OnMenuItemClickListener 2.android.widget.PopupMenu.OnMenuItemClickListener一般常用的是第二个,但是如果item本身没有单独的itemClickListen...

2019-01-17 15:55:34 893

转载 欢迎使用CSDN-markdown编辑器

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl

2016-12-22 17:12:30 140

Kotlin官方参考文档中文版

概述 Kotlin 用于服务器端 Kotlin 用于 Android Kotlin 用于 JavaScript Kotlin Native 1.1 的新特性 1.2 的新特性 开始 基础语法 习惯用法 编码规范 基础 基本类型 包 控制流 返回与跳转 类与对象 类与继承 属性与字段 接口 可见性修饰符 扩展 数据类 密封类 泛型 嵌套类 枚举类 对象 2 1.5.12 1.5.13 1.6 1.6.1 1.6.2 1.6.3 1.6.4 1.7 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 1.7.7 1.7.8 1.7.9 1.7.10 1.7.11 1.7.12 1.7.13 1.7.14 1.8 1.8.1 1.8.2 1.9 1.9.1 1.9.2 1.9.2.1 1.9.3 1.10 1.10.1 1.10.2 1.11 委托 委托属性 函数与 Lambda 表达式 函数 Lambda 表达式 内联函数 协程 其他 解构声明 集合 区间 类型检查与转换 This 表达式 相等性 操作符重载 空安全 异常 注解 反射 类型安全的构建器 类型别名 多平台项目(预览版) 核心库 标准库 kotlin.test 参考 关键字与操作符 语法 语法正文 兼容性 Java 互操作 Kotlin 中调用 Java Java 中调用 Kotlin JavaScript 3 1.11.1 1.11.2 1.11.3 1.11.4 1.11.5 1.11.6 1.12 1.12.1 1.12.2 1.12.3 1.12.4 1.12.5 1.12.6 1.12.7 1.13 1.13.1 1.13.2 1.13.3 动态类型 Kotlin 中调用 JavaScript JavaScript 中调用 Kotlin JavaScript 模块 JavaScript 反射 JavaScript DCE 工具 编写 Kotlin 代码文档 使用 Kapt 使用 Gradle 使用 Maven 使用 Ant Kotlin 与 OSGi 编译器插件

2019-01-23

安卓权威编程指南

第 1 章 Android 开发初体验 ......................... 1 1.1 Android 开发基础 ..................................... 2 1.2 创建 Android 项目 .................................... 2 1.3 Android Studio 使用导航 .......................... 6 1.4 用户界面设计 ........................................... 6 1.4.1 视图层级结构 .............................. 10 1.4.2 组件属性 ...................................... 10 1.4.3 创建字符串资源 ........................... 11 1.4.4 预览布局 ...................................... 12 1.5 从布局 XML 到视图对象 ........................ 13 1.6 组件的实际应用 ...................................... 16 1.6.1 引用组件 ...................................... 17 1.6.2 设置监听器 .................................. 17 1.7 创建提示消息 .......................................... 19 1.8 使用模拟器运行应用 ............................... 21 1.9 深入学习:Android 编译过程 ................. 23 1.10 关于挑战练习 ........................................ 25 1.11 挑战练习:定制 toast 消息 .................... 25 第 2 章 Android 与 MVC 设计模式 ............ 26 2.1 创建新类 .................................................. 26 2.2 Android 与 MVC 设计模式 ...................... 29 2.3 更新视图层 .............................................. 31 2.4 更新控制器层 .......................................... 33 2.5 在物理设备上运行应用 ........................... 37 2.5.1 连接设备 ...................................... 37 2.5.2 配置设备用于应用开发 ............... 37 2.6 添加图标资源 .......................................... 38 2.6.1 向项目中添加资源 ....................... 39 2.6.2 在 XML 文件中引用资源 ............. 41 2.7 挑战练习:为 TextView 添加监听器 ..... 42 2.8 挑战练习:添加后退按钮 ....................... 42 2.9 挑战练习:从按钮到图标按钮 ............... 42 第 3 章 activity 的生命周期 ......................... 45 3.1 日志跟踪理解 activity 生命周期 ............. 46 3.1.1 输出日志信息 .............................. 46 3.1.2 使用 LogCat ................................. 48 3.1.3 activity 生命周期实例解析 .......... 50 3.2 设备旋转与 activity 生命周期 ................. 52 3.3 保存数据以应对设备旋转 ....................... 56 3.4 再探 activity 生命周期 ............................ 58 3.5 深入学习:activity 内存清理现状 .......... 59 3.6 深入学习:日志记录的级别与方法 ........ 60 3.7 挑战练习:禁止一题多答 ....................... 61 3.8 挑战练习:评分 ...................................... 61 第 4 章 Android 应用的调试 ........................ 62 4.1 异常与栈跟踪 .......................................... 63 4.1.1 诊断应用异常 .............................. 64 4.1.2 记录栈跟踪日志 .......................... 65 4.1.3 设置断点 ...................................... 66 4.1.4 使用异常断点 .............................. 68 4.2 Android 特有的调试工具 ........................ 70 4.2.1 使用 Android Lint ........................ 70 4.2.2 R 类的问题 ................................... 71 4.3 挑战练习:探索布局检查器 ................... 72 4.4 挑战练习:探索内存分配跟踪 ............... 72 第 5 章 第二个 activity .................................. 74 5.1 创建第二个 activity ................................. 75 2 目 录 5.1.1 创建新的 activity ......................... 75 5.1.2 创建新的 activity 子类 ................. 78 5.1.3 在 manifest 配置文件中声明 activity ......................................... 78 5.1.4 为 QuizActivity 添加 CHEAT 按钮 ............................................. 79 5.2 启动 activity ............................................ 81 5.3 activity 间的数据传递 ............................. 83 5.3.1 使用 intent extra ........................... 83 5.3.2 从子 activity 获取返回结果 ......... 86 5.4 activity 的使用与管理 ............................. 91 5.5 挑战练习:堵住漏洞 .............................. 93 第 6 章 Android SDK 版本与兼容 .............. 94 6.1 Android SDK 版本 ................................... 94 6.2 Android 编程与兼容性问题 .................... 95 6.2.1 比较合理的版本 .......................... 95 6.2.2 SDK 最低版本 ............................. 96 6.2.3 SDK 目标版本 ............................. 97 6.2.4 SDK 编译版本 ............................. 97 6.2.5 安全添加新版本 API 中的代码 ... 97 6.3 使用 Android 开发者文档 ..................... 100 6.4 挑战练习:报告编译版本 ..................... 101 6.5 挑战练习:限制作弊次数 ..................... 102 第 7 章 UI fragment 与 fragment 管理器 .............................................. 103 7.1 UI 设计的灵活性需求 ........................... 104 7.2 引入 fragment ........................................ 104 7.3 着手开发 CriminalIntent ........................ 105 7.3.1 创建新项目 ................................ 107 7.3.2 两类 fragment ............................ 108 7.3.3 在 Android Studio 中增加依赖 关系 ........................................... 108 7.3.4 创建 Crime 类 ............................ 111 7.4 托管 UI fragment ................................... 112 7.4.1 fragment 的生命周期 ................. 112 7.4.2 托管的两种方式 ........................ 113 7.4.3 定义容器视图 ............................ 113 7.5 创建 UI fragment ................................... 115 7.5.1 定义 CrimeFragment 的布局 .... 115 7.5.2 创建 CrimeFragment 类 ............ 117 7.6 向 FragmentManager 添加 UI fragment ........................................... 122 7.6.1 fragment 事务 ............................ 123 7.6.2 FragmentManager 与 fragment 生命周期 .................................... 125 7.7 采用 fragment 的应用架构 .................... 126 7.8 深入学习:fragment 与支持库 ............. 127 7.9 深入学习:为什么优先使用支持库版 fragment ................................................. 128 第 8 章 使用 RecyclerView 显示 列表 .................................................. 129 8.1 升级 CriminalIntent 应用的模型层 ....... 130 8.2 使用抽象 activity 托管 fragment ........... 132 8.2.1 通用型 fragment 托管布局 ........ 133 8.2.2 抽象 activity 类 .......................... 133 8.3 RecyclerView 、 ViewHolder 和 Adapter ................................................. 137 8.3.1 ViewHolder 和 Adapter ........... 138 8.3.2 使用 RecyclerView .................. 141 8.3.3 列表项视图 ................................ 142 8.3.4 实现 ViewHolder 和 Adapter ... 143 8.4 绑定列表项 ........................................... 145 8.5 响应点击 ............................................... 147 8.6 深入学习: ListView 和 GridView ...... 148 8.7 深入学习:单例 .................................... 148 8.8 挑战练习: RecyclerView ViewType .... 149 第 9 章 使用布局与组件创建用户界面 ... 150 9.1 使用图形布局工具 ................................ 151 9.2 引入 ConstraintLayout ...................... 151 9.2.1 使用 ConstraintLayout .......... 152 9.2.2 约束编辑器 ................................ 153 9.2.3 腾出空间 .................................... 155 9.2.4 添加组件 .................................... 157 9.2.5 约束的 XML 形式 ...................... 159 9.2.6 编辑属性 .................................... 160 9.2.7 动态设置列表项 ........................ 162 目 录 3 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 17 9.3 深入学习布局属性 ................................ 163 9.3.1 dp、sp 以及屏幕像素密度 ......... 163 9.3.2 边距与内边距 ............................ 165 9.3.3 样式、主题及主题属性 ............. 166 9.3.4 Android 应用的设计原则 ........... 166 9.4 图形布局工具使用小结 ......................... 167 9.5 挑战练习:日期格式化 ......................... 167 第 10 章 使用 fragment argument ........... 168 10.1 从 fragment 中启动 activity ................. 168 10.1.1 附加 extra 信息 ....................... 169 10.1.2 获取 extra 信息 ....................... 170 10.1.3 使用 Crime 数据更新 CrimeFragment 视图 ............. 171 10.1.4 直接获取 extra 信息的缺点 .... 172 10.2 fragment argument ............................... 172 10.2.1 附加 argument 给 fragment ..... 173 10.2.2 获取 argument ........................ 174 10.3 刷新显示列表项 .................................. 174 10.4 通过 fragment 获取返回结果 ............... 176 10.5 深入学习:为何要用 fragment argument ............................................... 177 10.6 挑战练习:实现高效的 RecyclerView 刷新 ...................................................... 178 10.7 挑战练习:优化 CrimeLab 的表现 ..... 178 第 11 章 使用 ViewPager ........................... 179 11.1 创建 CrimePagerActivity ................. 180 11.1.1 ViewPager 与 PagerAdapter ........................ 181 11.1.2 整合并配置使用 CrimePagerActivity ............ 182 11.2 FragmentStatePagerAdapter 与 FragmentPagerAdapter ..................... 184 11.3 深入学习: ViewPager 的工作原理 .... 186 11.4 深入学习:以代码的方式创建视图 .... 187 11.5 挑战练习:恢复 CrimeFragment 的 边距 ...................................................... 187 11.6 挑战练习:添加 Jump to First 按钮和 Jump to Last 按钮 ................................. 188 第 12 章 对话框 ............................................ 189 12.1 创建 DialogFragment ........................ 190 12.1.1 显示 DialogFragment ........... 192 12.1.2 设置对话框的显示内容 ......... 194 12.2 fragment 间的数据传递 ....................... 196 12.2.1 传递数据给 DatePickerFragment ............ 197 12.2.2 返回数据给 CrimeFragment ... 199 12.3 挑战练习:更多对话框 ....................... 205 12.4 挑战练习:实现响应式 DialogFragment ................................. 205 第 13 章 工具栏 ............................................ 207 13.1 AppCompat .......................................... 207 13.2 工具栏菜单 .......................................... 209 13.2.1 在 XML 文件中定义菜单 ....... 210 13.2.2 创建菜单 ................................ 214 13.2.3 响应菜单项选择 ..................... 217 13.3 实现层级式导航 .................................. 218 13.4 可选菜单项 .......................................... 219 13.4.1 切换菜单项标题 ..................... 220 13.4.2 “还有个问题” ......................... 222 13.5 深入学习:工具栏与操作栏 ............... 224 13.6 挑战练习:删除 crime 记录 ................ 224 13.7 挑战练习:复数字符串资源 ............... 224 13.8 挑战练习:用于 RecyclerView 的 空视图 .................................................. 225 第 14 章 SQLite 数据库 ............................. 226 14.1 定义 schema ......................................... 226 14.2 创建初始数据库 .................................. 227 14.2.1 使用 Android Device Monitor 查看文件 ................................ 230 14.2.2 处理数据库相关问题 ............. 231 14.3 修改 CrimeLab 类 ................................ 232 14.4 写入数据库 .......................................... 233 14.4.1 使用 ContentValues ............. 233 14.4.2 插入和更新记录 ..................... 234 14.5 读取数据库 .......................................... 235 14.5.1 使用 CursorWrapper ............. 236 4 目 录 14.5.2 创建模型层对象 ..................... 238 14.6 深入学习:数据库高级主题介绍 ....... 241 14.7 深入学习:应用上下文 ....................... 241 14.8 挑战练习:删除 crime 记录 ................ 242 第 15 章 隐式 intent .................................... 243 15.1 添加按钮组件 ...................................... 244 15.2 添加嫌疑人信息至模型层 ................... 244 15.3 使用格式化字符串 .............................. 246 15.4 使用隐式 intent .................................... 248 15.4.1 隐式 intent 的组成 ................. 248 15.4.2 发送消息 ................................ 249 15.4.3 获取联系人信息 ..................... 252 15.4.4 检查可响应任务的 activity .... 254 15.5 挑战练习: ShareCompat .................... 256 15.6 挑战练习:又一个隐式 intent ............. 256 第 16 章 使用 intent 拍照 ........................... 258 16.1 布置照片 .............................................. 258 16.2 文件存储 .............................................. 260 16.2.1 使用 FileProvider ............... 261 16.2.2 指定照片存放位置 ................. 262 16.3 使用相机 intent .................................... 263 16.4 缩放和显示位图 .................................. 265 16.5 功能声明 .............................................. 268 16.6 挑战练习:优化照片显示 ................... 269 16.7 挑战练习:优化缩略图加载 ............... 269 第 17 章 双版面主从用户界面 .................. 270 17.1 增加布局灵活性 .................................. 271 17.1.1 修改 SingleFragment- Activity ................................ 272 17.1.2 创建包含两个 fragment 容器 的布局 .................................... 272 17.1.3 使用别名资源 ........................ 274 17.1.4 创建平板设备专用可选 资源 ........................................ 275 17.2 activity:fragment 的托管者 ............... 276 17.3 深入学习:设备屏幕尺寸的确定 ....... 284 17.4 挑战练习:添加滑动删除功能 ........... 285 第 18 章 应用本地化 ................................... 286 18.1 资源本地化 .......................................... 286 18.1.1 默认资源 ................................ 289 18.1.2 检查资源本地化完成情况 ..... 291 18.1.3 区域修饰符 ............................ 292 18.2 配置修饰符 .......................................... 294 18.2.1 可用资源优先级排定 ............. 295 18.2.2 多重配置修饰符 .................... 296 18.2.3 寻找最匹配的资源 ................ 297 18.3 测试备选资源 ...................................... 298 18.4 挑战练习:日期本地化 ...................... 298 第 19 章 Android 辅助功能 ....................... 299 19.1 TalkBack ............................................. 299 19.1.1 点击浏览 ................................ 301 19.1.2 线性浏览 ................................ 301 19.2 实现非文字型元素可读 ...................... 303 19.2.1 添加内容描述 ........................ 303 19.2.2 实现组件可聚焦 .................... 305 19.3 提升辅助体验 ...................................... 305 19.4 深入学习:使用辅助功能扫描器 ....... 309 19.5 挑战练习:优化列表项 ...................... 311 19.6 挑战练习:补全上下文信息 ............... 311 19.7 挑战练习:事件主动通知 ................... 311 第 20 章 数据绑定与 MVVM .................... 313 20.1 为何要用 MVVM 架构 ........................ 314 20.2 创建 BeatBox 应用 .............................. 314 20.3 导入 assets ........................................... 319 20.4 处理 assets ........................................... 321 20.5 使用 assets ........................................... 323 20.6 绑定数据 ............................................. 325 20.6.1 创建视图模型 ........................ 327 20.6.2 绑定至视图模型 .................... 328 20.6.3 绑定数据观察 ........................ 330 20.7 访问 assets ........................................... 332 20.8 深入学习:数据绑定再探 ................... 333 20.8.1 lambda 表达式 ....................... 333 20.8.2 更多语法糖 ............................ 333 20.8.3 BindingAdapter ................... 333 目 录 5 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 17 20.9 深入学习:为何使用 assets ................. 334 20.10 深入学习:什么是 non-assets ........... 334 第 21 章 音频播放与单元测试 .................. 335 21.1 创建 SoundPool ................................... 335 21.2 加载音频文件 ...................................... 336 21.3 播放音频 .............................................. 337 21.4 添加测试依赖 ...................................... 338 21.5 创建测试类 .......................................... 339 21.6 实现测试类 .......................................... 341 21.7 编写测试方法 ...................................... 342 21.8 数据绑定回调 ...................................... 346 21.9 释放音频 .............................................. 346 21.10 设备旋转和对象保存 ......................... 347 21.10.1 保留 fragment ..................... 348 21.10.2 设备旋转和已保留的 fragment .............................. 349 21.11 深入学习:是否保留 fragment .......... 351 21.12 深入学习:Espresso 与整合测试 ...... 351 21.13 深入学习:虚拟对象与测试 ............. 352 21.14 挑战练习:播放进度控制 ................. 353 第 22 章 样式与主题 ................................... 354 22.1 颜色资源 .............................................. 354 22.2 样式 ..................................................... 355 22.3 主题 ..................................................... 357 22.4 添加主题颜色 ...................................... 359 22.5 覆盖主题属性 ...................................... 361 22.6 修改按钮属性 ...................................... 364 22.7 深入学习:样式继承拾遗 ................... 367 22.8 深入学习:引用主题属性 ................... 367 第 23 章 XML drawable ............................ 368 23.1 统一按钮样式 ...................................... 368 23.2 shape drawable ..................................... 369 23.3 state list drawable ................................. 371 23.4 layer list drawable ................................ 372 23.5 深入学习:为什么要用 XML drawable ..................................... 373 23.6 深入学习:使用 mipmap 图像 ............ 374 23.7 深入学习:使用 9-patch 图像 ............. 375 23.8 挑战练习:按钮主题 ........................... 379 第 24 章 深入学习 intent 和任务 .............. 380 24.1 创建 NerdLauncher 项目 ..................... 380 24.2 解析隐式 intent .................................... 382 24.3 在运行时创建显式 intent .................... 386 24.4 任务与回退栈 ...................................... 388 24.4.1 在任务间切换 ........................ 389 24.4.2 启动新任务 ............................ 389 24.5 使用 NerdLauncher 应用作为设备 主屏幕 .................................................. 392 24.6 挑战练习:应用图标 ........................... 393 24.7 深入学习:进程与任务 ....................... 393 24.8 深入学习:并发文档 ........................... 395 第 25 章 HTTP 与后台任务 ....................... 398 25.1 创建 PhotoGallery 应用 ....................... 399 25.2 网络连接基本 ...................................... 401 25.3 使用 AsyncTask 在后台线程上 运行代码 .............................................. 403 25.4 线程与主线程 ...................................... 405 25.5 从 Flickr 获取 JSON 数据 .................... 407 25.6 从 AsyncTask 回到主线程 .................. 413 25.7 清理 AsyncTask .................................. 416 25.8 深入学习: AsyncTask 再探 ............... 416 25.9 深入学习:AsyncTask 的替代方案 .... 417 25.10 挑战练习:Gson ................................ 418 25.11 挑战练习:分页 ................................ 418 25.12 挑战练习:动态调整网格列 ............. 418 第 26 章 Looper 、 Handler 和 HandlerThread ............................ 420 26.1 配置 RecyclerView 以显示图片 ........ 420 26.2 批量下载缩略图 .................................. 422 26.3 与主线程通信 ...................................... 423 26.4 创建并启动后台线程 ........................... 424 26.5 Message 与 message handler ............... 426 26.5.1 剖析 Message ......................... 426 26.5.2 剖析 Handler ......................... 427 26.5.3 使用 handler ........................... 428 26.5.4 传递 handler ........................... 431 6 目 录 26.6 深入学习: AsyncTask 与线程 ........... 436 26.7 深入学习:解决图片下载问题 ........... 436 26.8 深入学习:StrictMode ........................ 437 26.9 挑战练习:预加载以及缓存 ............... 438 第 27 章 搜索 ................................................ 439 27.1 搜索 Flickr 网站 .................................. 439 27.2 使用 SearchView ................................ 443 27.3 使用 shared preferences 实现轻量级 数据存储 .............................................. 447 27.4 优化应用 .............................................. 451 27.5 挑战练习:深度优化 PhotoGallery 应用 ..................................................... 451 第 28 章 后台服务 ....................................... 452 28.1 创建 IntentService .......................... 452 28.2 服务的作用 .......................................... 454 28.3 查找最新返回结果 .............................. 456 28.4 使用 AlarmManager 延迟运行服务 .... 458 28.4.1 合理控制服务启动的频度 ..... 460 28.4.2 PendingIntent ..................... 461 28.4.3 使用 PendingIntent 管理 定时器 .................................... 461 28.5 控制定时器 .......................................... 462 28.6 通知信息 .............................................. 464 28.7 挑战练习:可穿戴设备上的通知 ....... 466 28.8 深入学习:服务之细节 ....................... 467 28.8.1 服务的能与不能 ..................... 467 28.8.2 服务的生命周期 ..................... 467 28.8.3 non-sticky 服务 ...................... 467 28.8.4 sticky 服务 .............................. 468 28.8.5 绑定服务 ................................ 468 28.9 深入学习: JobScheduler 和 JobService ......................................... 469 28.10 挑战练习:在 Lollipop 设备上使用 JobService ....................................... 472 28.11 深入学习:sync adapter .................... 472 第 29 章 broadcast intent .......................... 474 29.1 普通 intent 和 broadcast intent ............. 474 29.2 接收系统 broadcast:重启后唤醒 ...... 475 29.2.1 创建并登记 standalone receiver ................................... 475 29.2.2 使用 receiver .......................... 477 29.3 过滤前台通知消息 .............................. 479 29.3.1 发送 broadcast intent .............. 479 29.3.2 创建并登记动态 receiver ....... 480 29.3.3 使用私有权限限制 broadcast ................................ 482 29.3.4 使用有序 broadcast 收发 数据 ........................................ 484 29.4 receiver 与长时运行任务 .................... 488 29.5 深入学习:本地事件 .......................... 488 29.5.1 使用 EventBus ....................... 489 29.5.2 使用 RxJava ........................... 490 29.6 深入学习:探测 fragment 的状态 ....... 490 第 30 章 网页浏览 ....................................... 492 30.1 最后一段 Flickr 数据 ........................... 492 30.2 简单方式:隐式 intent ........................ 494 30.3 较难方式:使用 WebView ................... 496 30.4 处理 WebView 的设备旋转问题 .......... 502 30.5 深入学习:注入 JavaScript 对象 ........ 502 30.6 深入学习: WebView 升级 ................... 503 30.7 挑战练习:使用后退键浏览历史 网页 ..................................................... 504 30.8 挑战练习:非 HTTP 链接支持 ........... 504 第 31 章 定制视图与触摸事件 .................. 505 31.1 创建 DragAndDraw 项目 ..................... 505 31.2 创建定制视图 ...................................... 507 31.3 处理触摸事件 ...................................... 509 31.4 onDraw(...) 方法内的图形绘制 ........ 513 31.5 挑战练习:设备旋转问题 ................... 515 31.6 挑战练习:旋转矩形框 ...................... 515 第 32 章 属性动画 ....................................... 516 32.1 建立场景 ............................................. 516 32.2 简单属性动画 ...................................... 519 32.2.1 视图属性转换 ........................ 521 目 录 7 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 17 32.2.2 使用不同的 interpolator ......... 523 32.2.3 色彩渐变 ................................ 523 32.3 播放多个动画 ...................................... 525 32.4 深入学习:其他动画 API .................... 527 32.4.1 传统动画工具 ......................... 527 32.4.2 转场 ........................................ 527 32.5 挑战练习 .............................................. 527 第 33 章 地理位置和 Play 服务 ................ 528 33.1 地理位置和定位类库 ........................... 528 33.2 创建 Locatr 项目 .................................. 529 33.3 Play 服务定位和模拟器 ....................... 530 33.4 创建 Locatr 应用 .................................. 532 33.5 配置 Google Play 服务 ......................... 534 33.6 使用 Google Play 服务 ......................... 536 33.7 基于地理位置的 Flickr 搜索 ................ 538 33.8 获取定位数据 ...................................... 539 33.9 获取运行时权限 .................................. 542 33.10 寻找并显示图片 ................................ 546 33.11 挑战练习:权限使用理由 ................. 548 33.12 挑战练习:进度指示器 ..................... 549 第 34 章 使用地图 ........................................ 550 34.1 导入 Play 地图服务库 .......................... 550 34.2 Android 上的地图服务 ........................ 550 34.3 获取 Maps API key .............................. 550 34.4 创建地图 .............................................. 552 34.5 获取更多地理位置数据 ....................... 553 34.6 使用地图 .............................................. 556 34.7 深入学习:团队开发和 API key ......... 560 第 35 章 material design ........................... 562 35.1 material surface .................................... 562 35.1.1 elevation 和 Z 值 .................... 564 35.1.2 state list animator ................... 565 35.2 动画工具 .............................................. 566 35.2.1 circular reveal ......................... 567 35.2.2 shared element transition ........ 568 35.3 新的视图组件 ...................................... 571 35.3.1 card ......................................... 571 35.3.2 floating action button .............. 572 35.3.3 snackbar ................................. 573 35.4 深入学习 material design ..................... 57

2019-01-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除