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. Flutter接入极光推送

    (1)搜索 https://pub.dartlang.org/packages/jpush_flutter ,安装插件,并且按照官方配置 /android/app/build.gradle andro ...

  2. java模拟http的Get/Post请求,并设置ip与port代理

    本文涉及3个基本点: 1.因为很多公司的内网都设有代理,浏览器通过ip与port上网,而java代码模拟http get方式同样需要外网代理: 2.Java实现http的Get/Post请求代码: 3 ...

  3. C++PE文件格式解析类(轻松制作自己的PE文件解析器)

    PE是Portable Executable File Format(可移植的运行体)简写,它是眼下Windows平台上的主流可运行文件格式. PE文件里包括的内容非常多,详细我就不在这解释了,有兴趣 ...

  4. 聚合数据Android SDK 12306火车票查询订票演示示例

    1.聚合SDK是聚合数据平台,为移动开发者提供的免费数据接口.使用前请先到聚合平台(http://www.juhe.cn/)注册,申请相关数据. 2.下载聚合数据SDK,将开发包里的juhe_sdk_ ...

  5. HttpRuntime Cache用法及参数解释

    自己用到的: HttpRuntime.Cache.Insert("SchoolBindKcChangci", SchoolBindKcChangci, null, DateTime ...

  6. 09-利用session完成用户登陆

    /***********************************************login.html*****************************************/ ...

  7. 【打CF,学算法——一星级】Codeforces Round #313 (Div. 2) A. Currency System in Geraldion

    [CF简单介绍] 提交链接:http://codeforces.com/contest/560/problem/A 题面: A. Currency System in Geraldion time l ...

  8. 02 redis通用命令操作

    set hi hello 设置值 get hi 获取值 keys * 查询出所有的key memcached 不能查询出所有的key keys *h 模糊查找key keys h[ie] 模糊查找 k ...

  9. gdb ../sysdeps/i386/elf/start.S: No such file or directory

    使用 gdb 调试的时候 输入 l 之后出现下列信息 (gdb) l 1 ../sysdeps/i386/elf/start.S: No such file or directory. in ../s ...

  10. VS2012,VS2013启用SQLite的Data Provider界面显示

    VS2012,VS2013启用SQLite的Data Provider界面显示 VS 2012默认是不带的SQLite的Data Provider,所以无法直接在VS 2012里管理SQLite的数据 ...