AppCompat 22.1,Goole暴走,MD全面兼容低版本
分类: Android2015-04-24 09:48 1354人阅读 评论(0) 收藏 举报
武侠相关的文学作品中常用“四十岁后不滞于物,草木竹石均可为剑。自此精进,渐入无剑胜有剑之境。”形容一个人的武功技艺高超,已臻化境。而我们IT工程师自身的技艺水平到达一定程度后,也会处于这种“无码胜有码”的境界。但这是什么意思呢?是说我们从此不再写代码,每天躺在床上和白花花的天花板无言对望了吗?
不是的。我想对你说的是:你写下的每一行代码应该能为应用增加独特的价值,而不是为应用添加一行又一行繁复、无趣的模板代码。Android 提供支持库的初衷正是如此:让 Android 开发工程师把精力更多地放在逻辑实现上,而不是写业务代码。
最新发布的 Android 支持库一如既往地添加了许多实用的组件,并对 Support V4、AppCompat、Leanback、RecyclerView、Palette 和 Renderscript 库的内部实现逻辑作出改变。从新的 AppCompatActivity 和 AppCompatDialog 到 Android TV 全新的引导流程我们可以发现,新的库确实带来许多让我们耳目一新的惊喜。
Support V4
Support V4 库作为众多 Android 支持库的基础,包含许多向下兼容的类,大大简化了向下兼容的具体实现。
DrawableCompat 现在使drawable着色绘制向下兼容到了API 4:现在只需要通过 DrawableCompat.wrap(Drawable) 方法简单封装你的 Drawable ,就可以用 setTint()、setTintList()、setTintMode() 完成着色绘制,完全不需要为了支持多种颜色而去创建和维护几个不同的 Drawable 文件!
此外,我们正在通过 ColorUtils 类做一些适用于所有使用场景的 Palette 内部构件,为开发者提供预先构建的工具简化处理各种颜色的操作。ColorUtils 可以很容易地计算出颜色之间的对比度,确定维持最小对比度的最小透明度值(完美地保证文字的阅读体验),或者将颜色转换为对应的 HSL 值。
插值器是所有动画系统的重要组成部分,它负责控制一个动画中某项数值改变的比率(例如加速、减速等)。Lollipop 中的 android.R.interpolator 包内置了许多插值器,例如用于创建真实动作的 fast_out_linear_in、fast_out_slow_in、and linear_out_slow_in。但现在我们可以用代码调用 FastOutLinearInInterpolator、FastOutSlowInInterpolator、LinearOutSlowInInterpolator 类为动画添加这些插值器。除了那些预建的插值器,我们还创建了允许你创建二次方或三次方贝塞尔曲线的 PathInterpolatorCompat 类
这个版本的支持库还把Space控件从GridLayout库移动到了Support V4,使其不需要在项目中添加单独的依赖。Space控件是一种轻量的、无形的控件,可用于创建控件间的间隙效果。
AppCompat
AppCompat支持库开始地很低调,却是一个很重要的开端:为API 7及以上的设备提供了一个一致的Action Bar。 在版本21的修订中,它承担了新的职责:带来了material color palette、控件着色、Toolbar支持,还有更多支持所有API 7+的设备。单从ActionBarActivity名字上看是体现不出它全部功能的。
在此版本中,ActionBarActivity已经过时了,新的替代者是AppCompatActivity。然而,这不只是一个重命名。事实上,AppCompat的内在逻辑现在可以通过AppCompatDelegate实现-这是一个可以在所有Activity中包含的类,与合适的生命周期方法挂钩,并得到一致的主题、着色等,而不需要使用AppCompatActivity (尽管这仍然是最简单的开始方式)。
在全新的 AppCompatDelegate 类的帮助下,我们通过 AppCompatDialog 类提供了符合 Material Design 规范的对话框。如果你以前用过 AlertDialog ,那你就爽翻了,因为我们还在库里添加了全新的 support.v7.app.AlertDialog 类,让你用相同的API享受 AppCompatDialog 带来的便利。
在使用 AppCompat 时,自动为控件着色的能力是在应用中保持品牌烙印和一致性体验的重要保证。因为在填充布局时 AppCompat 会自动地为你将诸如 Button、TextView 这些传统控件替换为 AppCompatButton、AppCompatTextView 等新控件,以确保布局内的每一个控件都能支持着色。而在新的支持库中,色彩感知控件现在已经被公开,让控件类对自动着色的支持能延续到子类中。
这个列表囊括了目前所有的色彩感知控件:
AppCompatAutoCompleteTextView
AppCompatButton
AppCompatCheckBox
AppCompatCheckedTextView
AppCompatEditText
AppCompatMultiAutoCompleteTextView
AppCompatRadioButton
AppCompatRatingBar
AppCompatSpinner
AppCompatTextView
Lollipop 能够在 View 层通过使用XML中的 android:theme 属性在 View 中重写应用的主题,这对实现许多酷炫的应用 UI 非常有帮助,例如:我们需要在明亮主题的 Activity 中使用暗黑风格的 ActionBar。但现在 AppCompat 允许你在所有 API 11 以上的设备上通过 android:theme 定制 Toolbar。
如果你不太熟悉 AppCompat 库的话,不妨看看这个视频,你会发现在 Android 中为用户提供一致性体验是多么简单:
Leanback
即使 Leanback 库已经是 Android TV 应用中的最佳模板,但如果你看过最新的22.1支持库,你会发现通过最新的 Leanback 库创建的引导流程,会带来比过去好上10倍的体验。
在最新的 Leanback 库中,这些类和主题可以在 Android TV 中建立酷炫的引导流程:左边是引导视图,右边是引导步骤。引导流程的每一个步骤都可以通过继承自 Theme.Leanback.GuidedStep 的 theme 来自定义,如果你想要更高的定制自由度,你可以通过 GuidanceStylist 和 GuidedActionsStylist 实现你的需求。
除此以外,Android Support Library 22.1 修复了 Leanback 中的许多 Bug,优化性能,还对外声称:让用户和开发者通过 Leanback 库获得极致的体验是 Google 开发、优化 Leanback 库的目标!
RecyclerView
除了修复了一系列的 Bug,此版本还增加了新的 SortedList 数据结构。这个集合让持有有序自定义对象比过去简单,使 RecyclerView.Adapter 在数据发生改变时能够正确地分发改变的事件,维持子 Item 在增加/删除/移动/改变 时的动画。
此外,SortedList还支持成批地改变对象,事件分发只是适配器上一个单一的集合操作,确保大量items改变时能维持最佳的用户体验。
Palette
如果你有在应用开发时使用 Palette 提取图片中的颜色,那你肯定会很高兴,因为最新的 Palette 在保证了取色准确度的情况下,取色效率是以前的6-8倍!
Palette 现在通过构造者模式获得实例,而不像从前那样通过调用类似 Palette.generate(Bitmap) 的方法来获得,你现在需要用 Palette.from(Bitmap) 获得 Palette.Builder 对象,然后才能在顶用 generate() 或 generateAsync() 取得颜色表前改变运行 Palette 时能产生的最大颜色数和最大图片尺寸
Renderscript
Renderscript 能提供强大的计算能力,此外 Android Support Library 22.1 使一些预定义的脚本和调用脚本的内部函数在 API 8 以上的设备上也可以使用。通过一种改进的图像边缘检测算法确保本地的 Renderscript 函数总是选择了最快和最可靠的实现,这个版本极大地提升了所有设备的可靠性和性能表现。两个额外的内部函数也被添加在此版本中:ScriptIntrinsicHistogram 和 ScriptIntrinsicResize,完成采集到10。
结语
没有比这更好的时间来开始使用Android支持库。今天你就可以使用这个库开始开发了,从Android SDK Manager下载Android支持库和Android支持资源吧。
要了解更多关于Android的支持库和它提供给你的API,请访问Android开发者官网上的支持库章节的网页。