安卓Material Design(5)

694 查看

在2015年GoogleI/O大会上发布了Material Design支持库,使用它设计目标版本在API19以下的material应用瞬间变得十分轻松。在这个系列中我们将以RSS阅读器做为material系列的基础,并且完全使用新的设计支持库重写这个应用。本文中我们将看到设计支持库的新组件在旧版本Android上如何完美工作。

在看过Vandana ShahIan Lake和Chris Bannes在2015年GoogleI/O上展示的设计支持库后,我首先好奇这个库是怎么在旧版本Android上工作的。我注意到有一页幻灯片展示了点击Tabayout中一个标签所呈现的漂亮的涟漪效果,然后想到这个效果不大可能移植到低版本中。我就这个问题询问过Chris,他十分愿意分享一些关于向后兼容问题的见解,这些观点是这篇文章的基础。

让我们从首先注意的事情开始——涟漪触摸反馈。我认为很难向后兼容的原因是它们是如何渲染的。Lollipop的一个底层改变是渲染线程,这个线程与标准UI线程一起并行工作。渲染线程允许动画(如涟漪效果)有别于其他UI任务,在单独的线程中进行渲染来保证高帧率,使用户感觉动画效果十分平滑。通常一个触摸事件将触发一大堆UI线程上的任务(如Activity切换,或更新一个布局)。因此,在同一个线程上处理所有事情将使得涟漪动画的帧率迅速降低。在Lollipop之前的版本上,由于缺少专用渲染线程,使得涟漪效果是不大可能实现

那么在Lollipop之前版本的的设备上,触感反馈是什么样的呢?让我们在Jelly Bean上试试,来看看是什么效果:

https://www.youtube.com/embed/tjrIG5ITiGA?version=3&rel=1&fs=1&showsearch=0&showinfo=1&iv_load_policy=1&wmode=transparent

棒极了!看一看标签上的触感反馈,没有涟漪效果,但是这确实是正常的Lollipop早先版本的样式。这有点模糊,这是因为我们主题中为collorControlHighlight参数选择的颜色(与导航抽屉的选择状态共享)——很容易纠正。这是用户(可能不会)注意到的唯一真正不同。

除了不同的触摸反馈,还有其它的不同么?实际上还有另一个很细微的区别,但它太细微以至于当你搜索它的时候也很难发现,这就是FAB上的阴影渲染。Lollipop引入了一些强有力的阴影渲染技术以及elevation和translationZ,而这在低于Lollipop版本上是不可能的。尽管你不知道它,但是阴影渲染相当棒。即使存在解除指触行为,并且它看起来不错。

那么我在更老的Android版本——姜饼API 10上试试会怎么样

https://www.youtube.com/embed/ijxjjeT-hDM?version=3&rel=1&fs=1&showsearch=0&showinfo=1&iv_load_policy=1&wmode=transparent

在我们的WebView中,有一些明显的渲染问题,但这与设计支持库无关,可以忽略它。

我们看到主要问题是Toolbar和Tabayout中文字颜色是错误的。我猜可能是亮主题中没有darActionBar的概念,因为在API 11蜂巢发布之前没有ActionBar的概念。

另一个值得注意的是随着Snackbar的出现,我们没有让FAB起作用。Chris解释到,因为蜂巢版本前没有translationY,因此不大可能实现依赖translationY的属性动画。

总而言之,结果仍然相当不错。如这个系列中所见,我们仍然得到了其它美妙的东西,尽管有些方面不支持,行为尽可能优雅降级,结果仍然非常有用。

总而言之,设计支持库十分强大,并且向我们提供了十分有用的工具集它们既容易使用又完美的向后兼容。万分感谢Chris以及设计支持库背后的其他成员们。

到这里我们将结束这个系列,因为我们结束了RSS阅读器应用中的例子——至少可以说,在应用中使用FAB是脆弱的。不过不用担心,在后续文章中,我们将探索更多的特性,行为和很酷的东西。下周开始——持续关注。

本文中我们没有修改任何代码,前面文章的源码可以在这里找到。