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. testNG配置dataSource多数据源

    spring的XML配置好之后,运行testNG还会出问题. 搞定代码如下: /** * 基于Spring的服务层测试超类 * * @author chief */ @ContextConfigura ...

  2. linux中tr用法

    tr命令不能直接从文件中读取并转换文本,因此通常都使用重定向输入或者管道传递方法: -s 代替掉重复的字符 #echo "HHHHHHEEEElllooooo" | tr -s ' ...

  3. struts2类型转换+校验

    1.action中validate()与validateXxx() 用于action执行前的校验,如果校验失败,跳到input视图, 前者校验整个Action: 后者校验该Action中的Xxx方法. ...

  4. linux驱动开发重点关注内容--摘自《嵌入式Linux驱动模板精讲与项目实践》

    本文摘自本人拙著 <嵌入式Linux驱动模板精讲与项目实践> 初步看起来Linux设备驱动开发涉及内容非常多,而须要实现驱动的设备千差万别.事实上做一段时间驱动之后回首看来主要就是下面几点 ...

  5. 【Excle数据透视】如何在数据透视表字段列表中显示更多的字段

    创建完数据透视表之后,由于字段太多,在列表中没有完全显示 解决方案 通过"字段节和区域节并排"功能来显示更多字段 修改后结果 字段已经完全显示出来了! "字段节和区域节层 ...

  6. eclipse svn插件 删除原账号信息重新登录

    1.通过删除SVN客户端的账号配置文件    1)查看你的Eclipse中使用的是什么SVN Interface(中文:svn接口)windows > preference > Team ...

  7. 【Android实战】Gallary+ImageSwicther图片查看器

    仿照如今各大新闻站点图片新闻的浏览模式,上面展示详细图片(ImageSwitch),以下是能够滑动的小图片(Gallery). 当中须要注意的是ImageSwitch须要定义一个工厂返回的组件,而且能 ...

  8. Time倒计时

    commitTimeDate = new Date("2016/11/9 10:02:40").getTime() + 24*60*60*1000;//截止时间 myDate = ...

  9. 使用python处理实验数据-yechen_pro_20171231

    整体思路 1.观察文档结构: - 工况之一 - 流量一28 - 测点位置=0 -测点纵断面深度-1 -该点数据Speedxxxxxxxx.txt -测点纵断面深度-2 -测点纵断面深度-3 -... ...

  10. ie6中 object doesn’t support this property or method

    可能是由于方法或json中有注释,/**/或//删掉注释就可以了