Android Weekly Issue #251

April 2nd, 2017

Android Weekly Issue #251.

本期内容: Android O新增的API: View的tooltips; Android中的字体设置; 该不该将Kotlin用于产品代码; 实现一个带自定义动画的搜索Toolbar; JUnit 5中用Lambda表达式; 用Mockito和Espresso写测试;

native的mobile开发应该扩展一下自己的知识; Kotlin中的依赖注入实现; Kotlin中lambda表达式的简化; 一个Intellij IDEA的插件, 帮助你改善Java代码的可读性.

ARTICLES & TUTORIALS

Preliminary look at View tooltips

Android O新推出了一个API, 是给View加tooltips.

如何使用:

可以在xml里面用属性android:tooltipText, 或者使用Java方法View.setTooltipText()来指定提示文字.

它们的外观看起来就像一个toast(半透明的灰色方框, 有圆角). 它支持多行, 有最大宽度, 超过98个字符结尾会以...省略.

目前还不能被定制.

它在什么时候出现呢? 长按和悬停.

当然你的长按如果已经被处理过了(OnLongClickListener返回了true), 它就不会出现了.

Perfecting Custom Typography in Android

关于字体设置的微调, 作者他们弄了一个小工具: Typesetter来提高设计师和开发者沟通字体时候的效率.

字体尺寸

对于字体, 通常我们建议用sp(scaleable pixel), 1pt=1sp. (pt是point).

sp考虑到了用户设备上的字体设置, 所以通常是建议用sp来设置字体大小.

但是作者他们最近在应用中一些字很大的地方, 选择使用了dp (density-independent pixel), 这是因为这些字本来已经很大了, 所以他们不想让它们被调节以后变得更大.

Leading

在字体排版中, Leading是指字体行之间的竖直间距. 和line spacing和line height是同义词, 同样也由pt/sp作为单位.

字体文件中会有一个基本的leading值, 根据字体不同可能会不同.

在Android中TextView的leading可以通过lineSpacingExtra和lineSpacingMultiplier属性来定义. 在代码中可以通过方法setLineSpacing()来定义. 注意用这个方法时, 单位是像素.

Tracking

Tracking指字间距(letterspacing).

在Android中可以通过属性letterSpacing来设置(API 21及以上), 以em为单位的分数测量.

Kotlin in Production: Should you stay or should you go?

关于是否应该使用Kotlin, 作者发表了一些他的想法. 总体来说作者是支持Kotlin的, 对于各个可能存疑的点, 他都做出了解释.

How We Made the ToolBar on Android Move Like Jelly (in Kotlin)

在Toolbar上点击搜索按钮, 展开关键词输入框的时候, 加一个动画, 让它有弹性地震动一下, 如何实现呢?

本文给出了详细代码.

JUnit 5: Lambdas

如何在测试中使用lambda表达式, 这篇文章里作者讨论了如何在项目中使用lambda表达式的一些方法.

有两个比较好的方法:

Testing MVP using Espresso and Mockito

如何用Mockito和Espresso给一个MVP架构的程序写单元测试和UI测试.

The rise of the full-stack native mobile app developer

这篇文章就说native的客户端开发应该扩展自己, 学一点后端知识, 来应对行业发展和以后的趋势.

Kotlin Dependency Injection with the Reader Monad

Dependency Injection (DI)依赖注入是一种概念, 和具体使用的工具无关, 所以有各种不同的方法可以实现它.

本文只是提供一种思路, 用Kotlin中函数式的一些特性来做依赖注入.

首先介绍了什么是Functors, Applicatives和Monads, 作者推荐看这系列文章: Kotlin Functors, Applicatives, And Monads in Pictures. Part 1/3.

后来作者举了实际的例子, 详情见原文.

How lambdas work in Kotlin & setOnClickListener transformation

关于Kotlin中的lambda是如何简化的, 以setOnClickListener()为例:

它在Java中是这样定义的:

public void setOnClickListener(OnClickListener l) {
...
}

在Kotlin中是这样的:

fun setOnClickListener(l: (View) -> Unit)

最原始的写法:

view.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View?) {
toast("Hello")
}
})

然后IDE会提示你改为用lambda表达式:

view.setOnClickListener({ v -> toast("Hello") })

然而这个还可以进一步被简化:

如果一个方法的最后一个参数是一个函数, 那么它可以写在括号外面:

view.setOnClickListener() { v -> toast("Hello") }

如果一个方法只有一个参数, 并且是一个函数, 括号可以被删掉:

view.setOnClickListener { v -> toast("Hello") }

如果你并没有用到lambda表达式的参数, 你可以省略左边的部分:

view.setOnClickListener { toast("Hello") }

如果你的表达式只有一个参数, 而你要用它, 你仍然可以不写左边的部分, 用it来代替它:

view.setOnClickListener { doSomething(it) }

Making Java Code Easier to Read (Without Changing it)

如何在不改变代码的情况下, 增加Java代码的可读性?

IntelliJ IDEA为Java 8以下的用户提供了代码折叠功能, 来模拟lambda的语法.

作者自己又开发了一个新的插件Advanced Java Folding, 进一步扩展了这个代码折叠的功能. 本文介绍其中一些features. 这些特性在插件中都是可选的, 可以根据需要和喜好配置.

(经过折叠以后的Java代码确实看起来很像Kotlin).

本期还有两篇Android Things的文章就不介绍啦.

LIBRARIES & CODE

JellyToolbar

一个带弹性抖动动画的搜索Toolbar实现, 本期有一篇文章介绍.

Android Router

一个轻量级的组件化协议框架, 用来解耦复杂项目.

Typesetter

一个小工具, 用来调整和显示字体, 本期有相关文章.

Telegram

Telegram是一个通信应用, 关注速度和安全. 这是该应用的官方开源代码.

Badger

一个给图片加数字小标(badges)的库.

classyshark-calculate-size

这个工具可以计算出你依赖的库在apk的classes.dex中到底占多少大小.

SlidingRootNav

一个类似于DrawerLayout的ViewGroup, 抽屉部分隐藏在内容的下面. 内容可以向右滑动缩小以露出抽屉.

Android Weekly Notes Issue #251的更多相关文章

  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. BZOJ 1033: [ZJOI2008]杀蚂蚁antbuster(模拟)

    坑爹的模拟题QAQ DEBUG多了1kb QAQ 按题意做就行了 注意理解题意啊啊啊啊 尼玛输出忘换行wa了3次QAQ CODE: #include<cstdio>#include< ...

  2. wikioi 3132 高精度乘法(FFT)

    第一次学FFT,先膜拜一下法法塔大神ORZ 关于FFT的话,有一篇博文特别赞http://z55250825.blog.163.com/blog/static/15023080920143127465 ...

  3. 谈JS中的作用域链与原型链(1)

    学习前端也有一段时间了,觉得自己可以与大家分享一些我当初遇到疑惑的东西,希望能给对此问题有疑惑的朋友带来一点帮助. 先来普及一下JS的概念(不要嫌我啰嗦,可能一些朋友开始学习JS是跟着视频和写好的代码 ...

  4. 自学html5要花多长时间

    自学html5培训课程对于没有基础的那么就需要从头开始学,主要包括以下几方面 1. PC端网页制作基础,包括css,html 2. Javascript.jquery 主要是写一些动效 3. 学习UI ...

  5. 北邮OJ

    90. 字符串转换 时间限制 1000 ms 内存限制 65536 KB 题目描述 我们将仅由若干个同一小写字母构成的字符串称之为简单串,例如"aaaa"是一个简单串,而" ...

  6. 深入理解 JavaScript 异步系列(3)—— ES6 中的 Promise

    第一部分,Promise 加入 ES6 标准 原文地址 http://www.cnblogs.com/wangfupeng1988/p/6515855.html 未经作者允许不得转载! 从 jquer ...

  7. 安全体系(三)——SHA1算法详解

    本文主要讲述使用SHA1算法计算信息摘要的过程. 安全体系(零)—— 加解密算法.消息摘要.消息认证技术.数字签名与公钥证书 安全体系(一)—— DES算法详解 安全体系(二)——RSA算法详解 为保 ...

  8. JS入门(五)

    前面提了很多JS的基础知识,像一些基本输出语句啊,JS中的关键字呐.然后是JS中的一些循环,数组之类的,在之后就是函数了.这些都是在JS中很基础的一些东西,在我刚开始学JS的时候,这些我就觉得很简单, ...

  9. 为什么每个浏览器User-Agent都是Mozilla?真相原来是这样!

    转载自简明现代魔法http://www.nowamagic.net/librarys/veda/detail/2576 故事还得从头说起,最初的主角叫NCSA Mosaic,简称Mosaic(马赛克) ...

  10. Java面试01|JVM相关

    1.JVM内存查看与分析,编写内存泄露实例 堆区.栈区.方法区.本机内存都有可能内存溢出.在这里编写堆区内存溢出实例.如下(来自<深入理解Java虚拟机>一书. // -Xms20m -X ...