Android Weekly Issue #251
ARTICLES & TUTORIALS
Android O新推出了一个API, 是给View加tooltips.
它们的外观看起来就像一个toast(半透明的灰色方框, 有圆角). 它支持多行, 有最大宽度, 超过98个字符结尾会以...省略.
目前还不能被定制.
它在什么时候出现呢? 长按和悬停.
当然你的长按如果已经被处理过了(OnLongClickListener
返回了true), 它就不会出现了.
字体尺寸
对于字体, 通常我们建议用sp
(scaleable pixel), 1pt=1sp. (pt是point).
sp
考虑到了用户设备上的字体设置, 所以通常是建议用sp来设置字体大小.
但是作者他们最近在应用中一些字很大的地方, 选择使用了dp
(density-independent pixel), 这是因为这些字本来已经很大了, 所以他们不想让它们被调节以后变得更大.
Leading
在字体排版中, Leading是指字体行之间的竖直间距. 和line spacing
和line height
是同义词, 同样也由pt/sp
作为单位.
字体文件中会有一个基本的leading值, 根据字体不同可能会不同.
Tracking
Tracking指字间距(letterspacing).
在Android中可以通过属性letterSpacing
来设置(API 21及以上), 以em为单位的分数测量.
关于是否应该使用Kotlin, 作者发表了一些他的想法. 总体来说作者是支持Kotlin的, 对于各个可能存疑的点, 他都做出了解释.
在Toolbar上点击搜索按钮, 展开关键词输入框的时候, 加一个动画, 让它有弹性地震动一下, 如何实现呢?
本文给出了详细代码.
如何在测试中使用lambda表达式, 这篇文章里作者讨论了如何在项目中使用lambda表达式的一些方法.
有两个比较好的方法:
- 用.
- 用Kotlin.
如何用Mockito和Espresso给一个MVP架构的程序写单元测试和UI测试.
这篇文章就说native的客户端开发应该扩展自己, 学一点后端知识, 来应对行业发展和以后的趋势.
Dependency Injection (DI)依赖注入是一种概念, 和具体使用的工具无关, 所以有各种不同的方法可以实现它.
本文只是提供一种思路, 用Kotlin中函数式的一些特性来做依赖注入.
后来作者举了实际的例子, 详情见原文.
关于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) }
如何在不改变代码的情况下, 增加Java代码的可读性?
IntelliJ IDEA为Java 8以下的用户提供了代码折叠功能, 来模拟lambda的语法.
(经过折叠以后的Java代码确实看起来很像Kotlin).
本期还有两篇Android Things的文章就不介绍啦.
LIBRARIES & CODE
一个带弹性抖动动画的搜索Toolbar实现, 本期有一篇文章介绍.
一个轻量级的组件化协议框架, 用来解耦复杂项目.
Telegram是一个通信应用, 关注速度和安全. 这是该应用的官方开源代码.
一个给图片加数字小标(badges)的库.
这个工具可以计算出你依赖的库在apk的classes.dex中到底占多少大小.
一个类似于DrawerLayout
的ViewGroup, 抽屉部分隐藏在内容的下面. 内容可以向右滑动缩小以露出抽屉.
最后, 欢迎订阅公众号: 圣骑士Wind:
圣骑士Wind微信公众号.png