Android Weekly Issue #318

July 15th, 2018

Android Weekly Issue #318

本期内容包括: Android Navigation Component结合NavigationViewBottomNavigationView; 建议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, letalso.

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, runwith都有一个有用的特性: 可以用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.

另一种是返回最后一个语句, 比如runwith.

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, 没有任何其他工作.

关于如何选择, 这里有一个流程图.

如果你想返回对象本身, 那么用applyalso, 如果想返回一个其他结果, 用let, runwith.

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的更多相关文章

  1. Android Weekly Notes Issue #230

    Android Weekly Notes Issue #230 November 6th, 2016 Android Weekly Issue #230. Android Weekly笔记, 本期内容 ...

  2. Android Weekly Notes Issue #227

    Android Weekly Issue #227 October 16th, 2016 Android Weekly Issue #227. 本期内容包括: Google的Mobile Vision ...

  3. Android Weekly Notes Issue #237

    Android Weekly Issue #237 December 25th, 2016 Android Weekly Issue #237 这是本年的最后一篇issue, 感谢大家. 本期内容包括 ...

  4. Android Weekly Notes Issue #229

    Android Weekly Issue #229 October 30th, 2016 Android Weekly Issue #229 Android Weekly笔记, 本期内容包括: 性能库 ...

  5. Android Weekly Notes Issue #221

    Android Weekly Issue #221 September 4th, 2016 Android Weekly Issue #221 ARTICLES & TUTORIALS And ...

  6. Android Weekly Notes Issue #219

    Android Weekly Issue #219 August 21st, 2016 Android Weekly Issue #219 ARTICLES & TUTORIALS Andro ...

  7. Android Weekly Notes Issue #236

    Android Weekly Issue #236 December 18th, 2016 Android Weekly Issue #236 本期内容包括: Google的物联网平台Android ...

  8. Android Weekly Notes Issue #235

    Android Weekly Issue #235 December 11th, 2016 Android Weekly Issue #235 本期内容包括: 开发一个自定义View并发布为开源库的完 ...

  9. Android Weekly Notes Issue #234

    Android Weekly Issue #234 December 4th, 2016 Android Weekly Issue #234 本期内容包括: ConstraintLayout的使用; ...

随机推荐

  1. maven仓库中有jar包pom还报错

    maven仓库中有jar包pom还报错 就报错,咋啦? 这个包来源不明,自己拷贝进来的吧?你当我mvn是傻子?我要去网上验证一下: 我自己有个_remote.respositories文件,如果自己用 ...

  2. 转: JDK包含的基本组件

    JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品.自从Java推出以来,JDK已经成为使用最广泛的Java SDK.JDK 是整个Java的 ...

  3. json-path解析json方便可靠

    JsonPath is to JSON what XPATH is to XML, a simple way to extract parts of a given document. JsonPat ...

  4. windows的iis做后门,隐藏访问,无日志

    windows下的iis5/iis6做后门,隐藏访问,不留访问记录或者不留日志 好不容易攻下一台Windows2000/2003 IIS服务器,你一定会想,怎样才能长期占有这个“肉鸡”呢?聪明的你肯定 ...

  5. 数字精确运算BigDecimal经常用法

    import java.math.BigDecimal;  public class Arith {  /**  * 因为Java的简单类型不可以精确的对浮点数进行运算,这个工具类提供精  * 确的浮 ...

  6. vs2010 assistx安装教程

    参照此篇教程. 安装目录你可能找不到,因为那些文件是系统隐藏文件,打开隐藏即可. 然后,将此.exe安装到上面的目录下,然后,还需要进行一个破解,即需要将从网上下载的补丁放进去. 把目录下的VA_X. ...

  7. javascript判断智能终端信息

    < script type = "text/javascript" > /* * 智能机浏览器版本信息: * */ var browser = { versions: ...

  8. BCG菜单button的简单使用

    一,新建一个BCGprojectCBCGPMenuButton,基于对话框. 二.添加一个button,并关联一个CButton类型的变量m_btn1.然后手动将类型改CBCGPMenuButton成 ...

  9. Minify把CSS和JS压缩和削减

    Minify把CSS和JS压缩和削减(Minify:去掉空格回车符等),以及把多个CSS,JS文件整合到一个文件里.不要以为你的大带宽没有必要进行这类优化.使用它的理由更重要的是文件合并,而不是压缩, ...

  10. String 的fomat方法日期转换

    一.常规类型.字符类型和数值类型的格式说明符的语法如下:%[argument_index$][flags][width][.precision]conversion 可选的 argument_inde ...