- Callback
- 位操作
- hello world,kotlin 调用 java,java 调用 kotlin
- 包的定义和导入,基本数据类型,位操作,变量和常量,注释可嵌套,lateinit,by lazy,字符串模板
- 可空类型,数据类型判断(is, !is),类型转换,可空类型的相关操作符(let, ?:, ?, !!, as?),== 和 ===
- 语句(if..else, while, do..while, for, repeat, when, continue, break, return, 遍历 iterator 对象, try/catch/finally, kotlin.runCatching)
- 字符串的常用操作
- 数组和集合的常用操作
- 函数(方法)
- 类相关 1(基础)
- 类相关 2(类继承,接口,抽象类,by 委托)
- 类相关 3(枚举,密封类,数据类)
- Lambda 表达式,高阶函数
- 泛型
- let, also, with, run, runCatching, apply
- 协程基础(CoroutineScope, 为 CoroutineScope 扩展方法, runBlocking, launch, async, await, suspend, withContext, 设置/获取 CoroutineScope 的名称)
- Job 的等待与取消,超时处理,取消协程
- 协程的顺序执行,并行执行,async 的立即执行与懒启动,以及 async/await 的其他说明
- Channel(信道,用于在不同协程之间传输数据)
- 通过 ticker 信道实现类似计时器的效果,协程的异常处理,解决协程的并发问题
- Flow(异步流,通过 flow 发送和接收数据,flow 的超时处理,取消处理,异常处理,重试处理,指定 flow 阶段的运行协程使其不同于 collect 阶段的运行协程,让 collect 阶段运行到其他协程从而不阻塞当前协程)
- Flow(异步流,各种操作符的使用 buffer, conflate, collectLatest, drop, take, filter, map, transform, onEach, first, last, single, reduce, zip, combine, flatMapConcat, flatMapMerge 等)
- Lifecycle 基础以及 lifecycleScope
- ViewModel 基础以及 viewModelScope
- LiveData 基础,以及 LiveData 和 ViewModel 结合使用
- LiveData 指定的对象的某个属性发生了变化时通知给观察者
- DataBinding(MVVM)
- 位置相关
- 边距相关,隐藏相关
- 剪裁
- TextView 常用属性
- TextView 字体相关
- TextView 阴影和图文
- TextView 的 html 支持
- TextView 的 Spannable(自定义显示样式)
- TextView 常用行为
- EditText 常用属性
- EditText 选中和光标
- EditText 软键盘
- AutoCompleteTextView 基础
- MultiAutoCompleteTextView 基础
- Button 响应单击事件的方法
- Button 样式
- ImageButton 图片按钮
- FrameLayout 叠加布局
- LinearLayout 线性布局
- RelativeLayout 相对布局
- TableLayout 表格布局
- GridLayout 网格布局
- ConstraintLayout 约束布局(基础)
- ConstraintLayout 约束布局控件(链)
- ConstraintLayout 约束布局控件(屏障/分组/占位)
- ScrollView 滚动容器
- 通过 include 静态加载布局文件
- 通过 inflate 动态加载布局文件
- setContentView() 和 addContentView()
- ToolBar 基础
- ToolBar 显示自定义 view,清除自定义 view 与 Toolbar 两侧的间距,自定义弹出的 OptionMenu 的样式
- TabBar 自己实现
- DrawerLayout 基础
- ImageView 基础
- ImageView 的 scaleType
- 9patch(nine patch)图片
- Picasso 基础
- Glide 基础
- 截图
- MediaPlayer(在 SurfaceView 上播放)
- MediaPlayer(在 TextureView 上播放,可截图)
- MediaPlayer(视频中插广告)
- ProgressBar 基础
- ProgressBar 样式
- SeekBar 基础
- SeekBar 样式
- RatingBar 基础
- RatingBar 样式
- RadioButton 基础
- RadioButton 样式
- CheckBox 基础
- CheckBox 样式
- ToggleButton 基础
- ToggleButton 样式
- Switch 基础
- Switch 样式
- NumberPicker 基础
- NumberPicker 样式
- Spinner 基础
- Spinner 样式
- Spinner 通过 ArrayAdapter 显示数据
- Spinner 通过 SimpleAdapter 显示数据
- Spinner 通过自定义 BaseAdapter 显示数据
- AlertDialog 基础
- AlertDialog 自定义
- AlertDialog 大小、位置和动画
- AlertDialog 样式
- ProgressDialog 基础
- DatePickerDialog 基础
- TimePickerDialog 基础
- PopupWindow 基础
- PopupMenu 基础
- PopupMenu 样式
- ContextMenu 基础
- ContextMenu 样式
- ViewFlipper 基础
- ViewPager 基础 1
- ViewPager 基础 2
- ViewPager 和 FragmentPagerAdapter
- ViewPager 和 FragmentStatePagerAdapter
- GridView 基础 1
- GridView 基础 2
- ExpandableListView 基础
- ListView 通过 ArrayAdapter 显示数据
- ListView 通过 SimpleAdapter 显示数据
- ListView 通过自定义 BaseAdapter 显示数据(同时演示如何通过 convertView 复用的方式提高效率,以及 getView() 的调用时机)
- ListView 的 item 的点击事件和长按事件
- ListView 的单选和多选
- ListView 的表头,表尾,分隔线,滚动条的显示与隐藏,数据更新与 ListView 刷新,滚动到指定位置,监听 ListView 的滚动状态
- ListView 的多布局(不同的 item 使用不同的项模板)
- ListView 滚动到底部加载更多数据
- ListView 长按弹出上下文菜单
- ListView 多选删除
- RecyclerView 基础,各种布局方式(垂直布局,水平布局,标准网格布局,错列网格布局),响应单击事件和长按事件,不同的 item 使用不同的项模板,表头和表尾
- RecyclerView 分隔线
- RecyclerView 下拉刷新(结合 SwipeRefreshLayout 控件实现)
- RecyclerView 上拉加载更多数据
- WebView 基础,WebView 调试
- WebView 和 javascript 交互
- WebView 拦截 url 跳转,拦截 alert, confirm, prompt 弹出框,拦截文件选择框
- WebView 拦截 url 请求并返回自定义数据
- WebView 通过 post 加载 url,自定义请求 header,获取或设置 cookie
- 通过一个自定义 View 来演示 measure, layout, draw
- 通过一个自定义 ViewGroup 来演示 measure, layout, draw
- 自定义组合控件
- 自定义控件的自定义属性
- 自定义圆形带进度提示的 loading 控件
- 屏幕密度(物理分辨率, 逻辑分辨率, density, dpi, drawable 文件夹, mipmap 文件夹, dp, sp, px)
- 样式简介,自定义样式,动态更换样式
- 主题简介,继承主题并重写其中的一些样式,指定主题
- 自定义主题,动态更换主题
- 通过主题修改控件的默认样式
- 颜色和不透明度
- shape 渐变色(线性渐变,放射性渐变,扫描式渐变)
- shape 之填充,描边,圆角,尺寸,内部间距
- shape 形状(矩形,圆形,环形,直线)
- 图标
- 状态栏(statusBar)
- 导航栏(navigationBar)
- 沉浸式(immersive)
- 沉浸式(关于 statusBar 和 navigationBar 的常用效果)
- 监听配置变化(比如横竖屏切换等)
- 闪屏页(启动页)
- Matrix 变换(用于做位移,旋转,缩放,扭曲等变换)
- Matrix 变换(通过自定义控件实现)
- 视图动画(View Animation)基础
- 视图动画(View Animation)插值器(Interpolator)
- 视图动画(View Animation)自定义 Interpolator
- 帧动画(Drawable Animation)
- 属性动画(Property Animation)中的 ValueAnimator
- 属性动画(Property Animation)中的 ObjectAnimator
- 属性动画(Property Animation)中的 ViewPropertyAnimator
- 布局 xml 基础
- 国际化(多语言)
- 读取 meta-data 数据
- 通过 context 操作 files 目录中的文件
- 文件和文件夹操作(通过 File 对象)
- 内部存储,外部存储,权限请求,存储大小,获取 assets 中的数据,获取 res/raw 中的数据
- SharedPreferences 用户偏好数据的管理
- Sqlite 基础
- Android 11 使用外部存储
- Android 11 通过 MediaStore 管理文件
- Android 11 通过 Storage Access Framework 管理文件
- 按键事件
- Touch 基础(点击,双击,长按;触摸按下,触摸移动,触摸抬起)
- Touch 基础(触摸位置,事件冒泡)
- Touch 多点触摸(单点拖拽,两点缩放)
- Touch 在自定义控件中处理触摸事件;处理 Activity 的触摸事件
- Touch 简单的涂鸦板
- Gesture 手势检测基础
- Gesture 添加手势(向手势库中添加自定义手势)
- Gesture 识别手势(遍历手势库中的手势,通过逐一比对来识别当前手势)
- Activity 的生命周期,监听返回键,监听当前 activity 的离开事件
- Activity 的横屏和竖屏,以及横竖屏切换与状态保存
- Activity 之间的跳转和数据传递
- Activity 之间的跳转动画(单独指定或全局指定)
- Activity 堆栈
- Activity 样式(隐藏状态栏;改变状态栏颜色;对话框样式的 activity)
- Fragment 的生命周期
- Fragment 的动态加载和生命周期,以及 Fragment 的返回堆栈
- Fragment 与 Activity 的交互
- Fragment 动画
- Thread 基础
- Thread 演示 Object 的 wait() notify() notifyAll() 的使用
- Thread 演示 join() 的用法
- Thread 演示 interrupt() 的用法
- Thread 的异常处理
- Thread 导致的内存泄漏
- Handler 的使用
- Handler 和 Looper 的使用
- Handler 导致的 Activity 内存泄漏
- ThreadPool 的基础
- ThreadPool 的关闭
- Callable, Future, FutureTask 的使用
- Future, FutureTask 的关闭和异常处理
- AsyncTask 的使用
- Timer 和 TimerTask 的使用
- ThreadLocal 的使用
- Lock 基础
- Lock 可 interrupt 的 Lock
- Lock 演示 Condition 的 await() signal() signalAll() 的使用
- Lock 演示 ReentrantLock 的使用
- synchronized 锁方法
- synchronized 锁代码块
- ReadWriteLock 基础
- ReadWriteLock 演示 ReentrantReadWriteLock 的使用
- volatile 与原子性, 可见性, 有序性
- CountDownLatch 信号数量
- CyclicBarrier 屏障
- Semaphore 许可证中心
- atomic 原子操作
- Toast
- Notification
- 自定义 ui 的 Notification
- Service
- WorkerManager
- DownloadManager
- ContentProvider
- URLScheme(deep link)
- 通过指定 package, activity 打开指定的 apk
- 发送广播(静态注册广播接收器)
- 发送广播(动态注册广播接收器)
- 发送广播(有序广播)
- Clipboard
- 分享
- 强引用, 软引用, 弱引用
- Context
- Application
- 捕获未处理异常
- 在 KeyStore 中保存秘钥
- 获取唯一标识
- 监听 logcat 日志
- Singleton(单例模式)
- NDK 简单示例
- 生成 README.md
- 生成 html index