本文是直接从我个人网站上复制过来的,原文链接:http://kahn.wang/new-features-in-android-support-library-23-2/,希望大家多去访问。
今天Android官网更新了support library 23.2版本。本文翻译自http://android-developers.blogspot.jp/2016/02/android-support-library-232.html,介绍了新发布的支持库的几个新特性。
————————分割线————————
说到Android支持库,要意识到它不仅仅是一个单纯的库,而是整个能够提供向后兼容API的库的集合,它能提供独特的功能而不需要最新的平台支持。23.2版本添加了一些新的支持库,同时也为以前的库添加了一些新的功能。
矢量图片允许你将PNG图片替换为定义在XML中的单个矢量图片。矢量图片和动态矢量图片之前只能在Android5.0以上的设备中实现,现在可以通过两个新的支持库support-vector-drawable和support-animated-vector-drawable来实现。
Android Studio 1.4 通过generating pngs at build time功能来实现对矢量图片的有限的支持。要禁用这个功能(以便充分利用支持库的优点),你需要把 vectorDrawables.useSupportLibrary=true 添加到你的build.gradle文件中。
// Gradle Plugin 2.0+ android { defaultConfig { vectorDrawables.useSupportLibrary = true } }
上面这种新属性只能在Gradle2.0以上使用,如果你正在使用Gradle1.5,你应该用下面的方法:
// Gradle Plugin 1.5 android { defaultConfig { generatedDensities = [] } // This is handled for you by the 2.0+ Gradle Plugin aaptOptions { additionalParameters "--no-version-vectors" } }
VectorDrawableCompat支持API 7以上,而AnimatedVectorDrawableCompat支持API 11以上。Android的图片载入方式导致了并不是每个能够接受图片ID的地方(比如XML文件)都能支持矢量图片。不过庆幸的是,AppCompat添加了许多功能来使你能更容易地使用矢量图片。
首先,当使用带有ImageView的AppCompat时(或者ImageButton和FloatingActionButton),你可以使用app:srcCompat这一新特性来引用矢量图片(其他类型图片使用android:src也是有效的):
如果你想在运行 时改变图片,可以继续使用setImageResource()方法,跟以前一样。使用AppCompat和app:srcCompat是把矢量图片整合到你的app里的最简单的方法。
在Android5.0以下,不使用app:srcCompat而直接引用矢量图片是无效的。然而当矢量图片被引用在如StateListDrawable,InsentDrawable,LayerDrawable,LevelListDrawable和RotateDrawable等图片容器中时,AppCompat能对其有很好的支持。运用这一特性,在一些通常不支持矢量图的地方比如TextView的android:drawableleft属性,你都可以使用矢量图像。
尽管在你的app中能够使用矢量图片已经是一个非常大的改变了,新的版本中又添加了一个新的主题:Theme.AppCompat.DayNight.
在API 14以前,DayNight主题以及后继的DayNight.NoActionBar,DayNight.DarkActionBar, DayNight.Dialog等都会等效变成Light版本。但是在API 14 以及更高版本设备中,该主题允许应用同时支持Light和Dark模式,并能够在两种模式之间轻松切换。
通常系统默认的是Night模式,但你可以使用AppCompatDelegate中的方法来改变这一值。你可以使用静态的 AppCompatDelegate.setDefaultNightMode()方法来为整个应用设置默认的模式,也可以先通过getDelegate()取回AppCompatDelegate,然后使用setLocalNightMode()仅改变当前的Activity或Dialog的模式。
当使用AppCompatDelegate.MODE_NIGHT_AUTO时,系统就会根据一天的时间和你的上一次位置来自动切换白天和夜间模式。而MODE_NIGHT_NO和MODE_NIGHT_YES则强制使主题从不或总是使用夜间模式。
在DayNight主题中使用硬编码的颜色很容易导致文字或者图片在模式改变后看不清楚。如果为你的文本使用标准的TextAppearance.AppCompat风格或者来自于主题的颜色,如android:textColorPrimary,你会发现模式改变时颜色也会自动改变,从而提高可读性。
如果你喜欢定制任何资源,尤其是对于夜间模式,AppCompat使用night资源限定文件夹来使定制任何资源成为可能。尽可能使用标准颜色或者利用AppCompat的着色支持,才能更容易地使用这一模式。
设计支持库(Design Support Library)提供了许多模型都符合material design。这次的新版本也允许开发者轻松地把bottom sheets添加进他们的应用中。
通过为CoordinatorLayout的子视图添加BottomSheetBehavior(比如添加app:layout_behavior="android.support.design.widget.BottomSheetBehavior"),你便能够获得可以在下面五种状态间自由变换的触摸选项。
需要切记的是在bottom sheet中使用的滑动容器必须支持嵌套滑动(如NestedScrollView , RecyclerView , 或API21以上的ListView/ScrollView).
如果你想收到状态改变的回调,你可以添加一个BottomSheetCallback类:
// The View with the BottomSheetBehavior
View bottomSheet = coordinatorLayout.findViewById(R.id.bottom_sheet);
BottomSheetBehavior behavior = BottomSheetBehavior.from(bottomSheet);
behavior.setBottomSheetCallback(new BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
// React to state change
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
// React to dragging events
}
});
尽管BottomSheetBehavior可以捕获传统的bottom sheet的情况,新的版本也提供了BottomSheetDialog和BottomSheetDialogFragment来满足对话框形式的bottom sheet。只需要简单地把AppCompatDialog替换为BottomSheetDialog以及把AppCompatDialogFragment替换为BottomSheetDialogFragment,你就可以实现一个bottom sheet风格的对话框。
v4支持库是许多支持库的基础,同时也将许多新的平台版本才有的功能反向移植到旧版本中。
之前版本中使用MediaSessionCompat类来为媒体播放提供稳固的支持,最新的版本中添加了MediaBrowserServiceCompat类和MediaBrowserCompat类提供了一种兼容的解决方案,可以把最新API才有的功能(甚至在Android6.0中才被添加的)带到所有API4以上的设备中。因为它提供了一个标准的接口来连接你的媒体播放服务和你的用户界面,所以在Android汽车(Android auto)中播放音频和在Android手表(Android Wear)中浏览多媒体内容就变得十分容易了。
要创建一个支持动画效果的列表或者网格,RecyclerView是一种很好的选择,它具有很大的灵活性。最新版本在LayoutManager中添加了一个令人激动的新功能:自动测量(auto-measurement)。这使得RecyclerView可以根据内容的尺寸来确定本身的大小。之前在定义RecyclerView的尺寸时使用WRAP_CONTENT是无效的,而现在则变为有效!你会发现在布局管理器中建立的所有布局现在都支持自动测量。
由于这项改变,你需要再三确认你列表项视图的布局属性:以前被忽视的布局属性(如在滚动方向的MATCH_PARENT)现在都会完全支持。
如果你自定义的布局管理器并没有继承自任何已建立的布局管理器,你需要使用setAutoMeasureEnabled(true)方法,并且参考Java文档做一些小的变动。
虽然RecyclerView可以使其子视图具有动画效果,但当它自身的边界改变时却没有动画效果。如果你想在RecyclerView边界改变时加入动画,你可以使用Transition APIs.
自定义标签(Custom Tabs)可以使你浏览网页内容就像在使用app一样。在最新版本中,你可以在网页内容的底栏部分加入自定义的动作按钮。
通过使用 addToolbarItem() 方法,你可以在底栏中添加最多5个动作按钮,并且使用setToolbarItem()方法来设置它们。跟之前的setToolbarColor()方法类似,你也可以使用setScondaryToolbarColor()方法来设置底栏背景色。
Leanback Library提供了许多专为电视体验优化的标准组件,你可以利用这些工具轻松地把你的应用部署到Android电视上。在该版本中GuidedStepFragment获得了一系列重大的改进。
其中最为显著的变化可能就是第二列动作按钮的引入(可以通过覆盖onCreateButtonAction()方法或使用setButtonActions()方法来进行添加)。这使得无需滑动GuidedActions列表就能看到所有的动作按钮。
说到GuidedActions,新版本提供了更加丰富的输入选择,包括可编辑的描述(使用discriptionEditable()方法)、可下拉子菜单(使用subActions()方法)和日期选择对话框(GuidedDatePickerAction).
在需要的时候,这些组间能够让你更容易地获取用户信息。
现在你可以直接通过SDK Manager和Android Studio更新到Android Support Library 23.2。好好利用这些新功能吧!
发现bug可以报告到b.android.com上,并且还可以通过Android Development Google+社区和其他Android开发者联系。