Android Weekly Notes Issue #318
Android Weekly Issue #318
July 15th, 2018
Android Weekly Issue #318
本期内容包括: Android Navigation Component结合NavigationView和BottomNavigationView; 建议build多个modules到一个大aar; 应用例子说明UI层构建; Realm代码迁移到Kotlin; MVI模式的用法; Facebook和Twitter的sdk集成实现;
Kotlin中的scope functions; Google的机器学习例子网站: Seedbank; 用Kotlin SDL包装一个Java Builder.
ARTICLES & TUTORIALS
Android Jetpack - NavigationUI
Jetpack中的Navigation Component可以帮助我们做Fragment间的导航转换, 从而减少一些样板代码.
本文介绍NavigationView和 BottomNavigationView结合navigation graph的用法.
Why We Need “fat” AARs for Android Libraries
作者希望能够用多个modules创建一个aar.
这样既有利于开发时候的业务分层, 也能够提供一个整体的第三方库.
这是作者提出的issue: https://issuetracker.google.com/issues/62121508
本文主要说明他需要这样做的理由.
Maintainable Architecture – UI Layer
一个天气应用的UI层设计.
(Kotlin, dagger).
Migrating your Realm to Kotlin
作者他们要把自己的Android应用迁移到Kotlin, 本文讨论了其中数据层迁移中(Realm相关)发现的一些问题.
Model-View-Intent & Data Binding
作者以一个登录界面为例, 讲述Model-View-Intent模式的用法.
使用了这个MVI的library: mosby.
文中例子用Kotlin实现, 结合MVI和Data Binding.
Social Network Integration on Android
Facebook和Twitter的SDK集成, 实现登录和分享功能.
Kotlin Demystified: What are 'scope functions' and why are they special?
Kotlin的"scope functions"是允许改变变量scope的函数.
Kotlin的标准库中有五个: apply, run, with, let和also.
run可以创建一个scope:
fun myFun() {
val outside = 6.2831853071
run {
val inside = 1.61803398875
// Both outside and inside are usable and in scope
}
// inside is out of scope, and only outside is available
}
apply, run和with都有一个有用的特性: 可以用this表示这个调用用到的变量:
class Foo {
//...
myView.run {
// this refers to myView rather than Foo inside the block.
alpha = 0.5f
background = ContextCompat.getDrawable(context, R.drawable.my_drawable)
}
}
如果想用外面的变量, 可以像我们在内部类中做的那样: 用this@Foo.
scope functions也是函数, 需要返回值.
一种是返回接受者, 比如apply.
另一种是返回最后一个语句, 比如run和with.
let工作起来像run, 可以用来做一些不为null的时候的工作:
myIntent?.let {
it.data = data
startActivity(it)
}
其中let的引用对象不是用this, 而是用it.
也可以这样写:
myIntent?.let { intent ->
intent.data = data
startActivity(intent)
}
also工作起来像apply, 也是用it.
可以做一些额外的工作, 比如:
val myListener = Listener().also {
addListener(it)
}
和:
val key: String get() = keystore.getKey(KEY_ID).also {
Log.v(TAG, "Read key at ${System.currentTimeMillis()}")
}
还有一些操作符: forEach, map, filter, 它们实际上也创建了scope, 但是它们也有一些其他的工作, 比如迭代, 映射, 过滤等. Scope functions特殊的地方就在于, 只创建scope, 没有任何其他工作.
关于如何选择, 这里有一个流程图.
如果你想返回对象本身, 那么用apply或also, 如果想返回一个其他结果, 用let, run和with.
Seedbank — discover machine learning examples
Google启动的Seedback是一个机器学习的例子网站, 每一个例子都可以用浏览器查看, 并且可以编辑扩展.
From Java Builders to Kotlin DSLs
DSLs – Domain Specific Languages.
本文讲一个具体的DSL实现: 把一个Java的Builder用Kotlin包装.
作者把这个库MaterialDrawer用Kotlin包装了: MaterialDrawerKt.
LIBRARIES & CODE
android-face-detector
Android实时人脸检测的库, 基于Firebase的ML kit.
UnderlinePageIndicator
配合ViewPager使用的一个indicator, 给tab文字加上下划线, 有滑动动画.
Seedbank
机器学习例子库.
Android Weekly Notes Issue #318的更多相关文章
- Android Weekly Notes Issue #230
Android Weekly Notes Issue #230 November 6th, 2016 Android Weekly Issue #230. Android Weekly笔记, 本期内容 ...
- Android Weekly Notes Issue #227
Android Weekly Issue #227 October 16th, 2016 Android Weekly Issue #227. 本期内容包括: Google的Mobile Vision ...
- Android Weekly Notes Issue #237
Android Weekly Issue #237 December 25th, 2016 Android Weekly Issue #237 这是本年的最后一篇issue, 感谢大家. 本期内容包括 ...
- Android Weekly Notes Issue #229
Android Weekly Issue #229 October 30th, 2016 Android Weekly Issue #229 Android Weekly笔记, 本期内容包括: 性能库 ...
- Android Weekly Notes Issue #221
Android Weekly Issue #221 September 4th, 2016 Android Weekly Issue #221 ARTICLES & TUTORIALS And ...
- Android Weekly Notes Issue #219
Android Weekly Issue #219 August 21st, 2016 Android Weekly Issue #219 ARTICLES & TUTORIALS Andro ...
- Android Weekly Notes Issue #236
Android Weekly Issue #236 December 18th, 2016 Android Weekly Issue #236 本期内容包括: Google的物联网平台Android ...
- Android Weekly Notes Issue #235
Android Weekly Issue #235 December 11th, 2016 Android Weekly Issue #235 本期内容包括: 开发一个自定义View并发布为开源库的完 ...
- Android Weekly Notes Issue #234
Android Weekly Issue #234 December 4th, 2016 Android Weekly Issue #234 本期内容包括: ConstraintLayout的使用; ...
随机推荐
- stretchableImageWithLeftCapWidth气泡拉伸
- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCap ...
- Scanner遇上UnmappableCharacterException
上周末的时候.朋友约好去KTV,鉴于我这样的不怎么听歌的孩子伤不起啊,灵机一动就把我的酷狗歌单导出来了,XML文件嘛,内容太多,我仅仅想要歌名足已. 于是写了一个java去输出歌名. 岂料我受 ...
- 【Python】随机漫步
创建Randomwalk()类 我们将使用Python来生成随机漫步数据,再使用matplotlib以引入瞩目的方式将这些数据呈现出来 首先创建类Randomwalk() from random im ...
- 动态PPT制作
今天开通的博客,希望以后能够和大家一起分享学习心得.今天也是第一次学习制作动态PPT. 如果想要做成flash那种效果,建议学习下<动画传奇>这本书. 做成flash效果,需要用到动画中的 ...
- java中各种时间格式的转化
http://www.chinaitpower.com/A/2005-01-14/104881.html 使用java.util.Calendar返回间隔天数 static int g ...
- uva 1493 - Draw a Mess(并查集)
题目链接:uva 1493 - Draw a Mess 题目大意:给定一个矩形范围,有四种上色方式,后面上色回将前面的颜色覆盖,最后问9种颜色各占多少的区域. 解题思路:用并查集维护每一个位置相应下一 ...
- android一步一步实现视频clientapp(一)
我开发完毕了一个完整的视频clientapp.如今.分享出来.供刚開始学习的人学习參考(大神就不用看了,比較简单,仅供入门),大家相互交流相互学习. 项目有些功能,我时间也不是非常多.仅仅能时不时更新 ...
- Theme.AppCompat.Light.DarkActionBar ActionBarActivity
关于android-support-v7-appcompat.jar的引用.这个不单纯的把jar复制到项目lib目录下的,不然就会报一堆主题找不到的2b问题, 正确方法例如以下: 1.找到androi ...
- mysql索引类型normal,unique,full text
normal:表示普通索引 unique:表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号用作索引时,可设置为unique full textl: 表示 全文搜索的索引. FULL ...
- HDU 2473 Junk-Mail Filter 删点并查集
题目来源:pid=2473">HDU 2473 Junk-Mail Filter 题意:2中操作 M x, y 将x,y 合并到一个集合 S x 将x从所在的集合去掉 自己成为一个集合 ...