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. FTP的主动模式与被动模式

    FTP服务器使用20和21两个网络端口与FTP客户端进行通信. FTP服务器的21端口用于传输FTP的控制命令,20端口用于传输文件数据. FTP主动模式: FTP客户端向服务器的FTP控制端口(默认 ...

  2. Linux下ntp时间同步

    在root用户下执行 先安装同步时间软件,每台机器执行 yum install -y ntp 然后执行以下命令: crontab -e */10 * * * * /usr/sbin/ntpdate - ...

  3. imagemagick imagick

    imagemagick#图像处理软件 安装解压 ./configure make make install imagick#是php图像扩展模块 调用imagemagick处理图像 安装解压/opt/ ...

  4. 【SQL】SQL Server中存储过程的调试方法

    1.以管理员用户登录DB服务器,把域用户追加到「Administrators」组. 2.在本机上以域用户登录,启动VS. 3.追加DB连接 4.右击要debug的存储过程,选择「ストアドプロシージャに ...

  5. x86 Android游戏开发专题篇之使用google breakpad捕捉c++崩溃(以cocos2dx为例)

    近期一直都在x86设备上进行游戏开发.就c++层和Android java层倒没有什么要特别注意的(除了须要注意一下改动Application.mk指定平台外),在c++崩溃的时候,非常多时候看不到堆 ...

  6. element的el-tabs控制,以及el-select 多选默认值

    一.el-tabs 1.element自己已经封装好了,当切换时v-model的值自动切换为el-tabs-pane的name对应的值. 如下: <el-tabs v-model='active ...

  7. 【LeetCode】Partition List ——链表排序问题

    [题目] Given a linked list and a value x, partition it such that all nodes less than x come before nod ...

  8. 27:简单错误记录SimpleErrorLog

    题目描述 开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号. 处理: 1. 记录最多8条错误记录,循环记录,对相同的错误记录(净文件名称和行号完全匹配)只记录一条,错误计数增加: ...

  9. 2014acm亚洲区域赛陕西赛总结

    这次是第一次出来到外面比赛,一切都是非常新鲜的,带着新鲜来到了古城西安.首先感觉就是志愿者一点都不热情.一副爱理不理的,这不是有违我大西北人的热情好客么. 直接说比赛吧. 第一天热身赛,出了两道非常水 ...

  10. log4j:WARN Please initialize the log4j system properly.

    在tomcat启动的时候,出现这个警告: log4j:WARN No appenders could be found for logger (org.apache.commons.digester. ...