参考:
http://zmywly8866.github.io/2015/10/09/android-support-library.html
V4 Support Library
这个包的名字是:“android-support-v4.jar”,是为Android 1.6(API版本为4)及以上的版本设计的,它包含大部分高版本中有而低版本中没有的API,包括application components、user interface features、accessibility、data handling、network connectivity、and programming utilities
V7 SupportLibraries
针对Android 2.1(API Level 7)及以上的版本谷歌提供了一系列的support包,这些support包各自对应着特定的功能,每一个都可以单独地被引用。
V7 appcompat library
这个包的主要作用是为了在低版本实现Android的Holo风格界面而引入的,主要包括ActionBar、AppCompat等类和主题,它是一个依赖工程而不是jar包。
注意:这个包需要依赖android-support-v4.jar,如果你使用的是Eclipse或者Ant编译你的APP,确保你在使用这个依赖包时集成了android-support-v4.jar这个jar包。
v7 cardview library
一个在Android 5.0才被引入的卡片布局support包。
v7 gridlayout library
一个支持网格布局的support包。
v7mediarouter library
一个用于设备间音频、视频交换显示的support包。
v7 palette library
一个可以实现页面的颜色动态变换的support包,Palette是这个support包的核心类。
v7 recyclerview library
核心类是RecyclerView,用于替换ListView、GridView等需要依赖Adapter的View,具体可以查阅RecyclerView方面的资料。
v7 Preference Support Library
一个用于支持各种控件存储配置数据的support包。
v8 renderscript library
一个用于渲染脚本的support包。
v13 Support Library
这个包的作用主要是为Android3.2(API Level 13)及以上的系统提供更多地Fragment特性支持,使用它的原因在于,android-support-v4.jar中虽然也对Fragment做了支持,由于要兼容低版本,导致他是自行实现的Fragment效果,在高版本的Fragment的一些特性丢失了,而对于v13以上的sdk版本,我们可以使用更加有效,特性更多的代码。这个包的设计是为了android 3.2及更高版本的,一般我们都不常用,平板开发中能用到。
v17 Leanback Library
一个主要作用是用于支持电视设备的support包,为电视设备提供了很多组件,比如:BroweFragment、DetailsFragment、PlaybackOverlayFragment、SearchFragment等。
Android Support Library 23.2
Android Support Library 23.2 中文版
本周 Android Support 库发布了 23.2新版本,该版本包含了几个新功能。
本次更新主要涉及:
1.Support Vector Drawables and Animated Vector Drawables
2.AppCompat DayNight theme
3.Design Support Library: Bottom Sheets
4.Support v4: MediaBrowserServiceCompat
5.RecyclerView
6.Custom Tabs
7.Leanback for Android TV
支持 Vector Drawables 和 Animated Vector Drawables
使用矢量图的好处之一就是不用出多个图片(hdpi,xhdpi 等)了, 只需要一个矢量图即可涵盖所有屏幕密度的需要。矢量图在Android 5.0 才开始支持,使用23.2 support 库中的support-vector-drawable 和animated-vector-drawable 可以在之前的版本支持矢量图了。之前Android studio在 build的时候, 通过生成 PNG图片来支持矢量图,要使用 23.2版本中的矢量图功能,需要禁用之前版本的功能。如果你使用的 gradle插件为 2.0+版本,则通过如下方式来启用新功能:
// Gradle Plugin 2.0+
android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
如果你使用 1.5 的 gradle 插件,则需要通过如下的方式:
/ Gradle Plugin 1.5
android {
defaultConfig {
generatedDensities = []
}
// This is handled for you by the 2.0+ Gradle Plugin
aaptOptions {
additionalParameters "--no-version-vectors"
}
}
然后就可以使用 VectorDrawableCompat 和 AnimatedVectorDrawableCompat 了,VectorDrawableCompat最低可以在 API 7 版本上使用, 而 AnimatedVectorDrawableCompat需要 API 11 版本。目前通过 AppCompat 库只支持 ImageView和其子类(例如 ImageButton和 FloatingActionButton)可以在布局文件中直接使用 矢量图,支持方式为使用 app:srcCompat来替代 android:src
如果在代码中设置矢量图,则和之前一样,可以直接使用 setImageResource() 。使用AppCompat 和app:srcCompat 是使用矢量图最简单的方式。
在5.0之前的版本除了 app:srcCompat 属性之外,其他属性都不支持矢量图,例如TextView 的android:drawableLeft ,你如果在该属性上使用矢量图,则在5.0之前的版本上会crash。但是,你如果把矢量图放到其他Drawable 容器中,再使用这个Drawable 容器可以支持5.0之前的版本,支持的容器有StateListDrawable, InsetDrawable, LayerDrawable, LevelListDrawable,和 RotateDrawable。
你可以在 Drawable 容器中应用你的矢量图,例如通过 StateListDrawable 来引用矢量图,然后在TextView 的android:drawableLeft 中使用这个StateListDrawable,这样在5.0 之前的版本也可以使用矢量图了。
这样每个矢量图都需要放到一个 Drawable 容器中,可能比较繁琐,如果你使用 Data Binding 框架,则还可以又一个相对方便的方式。
定义一个 BindingAdapter, 该 BindingAdapter 把一个Drawable id绑定到 TextView的 drawableTop,
然后在 布局文件中,使用这个自定义的 BindingAdapter,
AppCompat DayNight 主题
除了支持矢量图以外,23.2版本中还保护了一个新的Theme.AppCompat.DayNight主题。
在API 14之前的版本,DayNight主题和其子主题(DayNight.NoActionBar, DayNight.DarkActionBar, DayNight.Dialog等)都使用白色主题替代。在14+版本,则 DayNight可以使应用很容易的同时支持白色和黑色主题,并且可以根据用户当前的时间自动切换主题,白天使用白色主题,夜晚使用黑色主题,是不是很酷。
默认情况下系统使用UiModeManager.getNightMode()来判断是否使用黑色主题。在AppCompatDelegate中可以重写该方法。通过函数AppCompatDelegate.setDefaultNightMode()可以设置整个应用的模式,也可以通过getDelegate().setLocalNightMode()函数来修改当前 Activity 和Dialog 的主题。
如果使用AppCompatDelegate.MODE_NIGHT_AUTO 模式,系统会根据当前的时间和设备最后已知的位置(需要您的应用具有位置权限)来自动切换主题。
如果你使用了DayNight ,请全面测试你的应用在每个主题都可以使用,特别是文本和图标的颜色,如果你使用标准的TextAppearance.AppCompat来设置文字样式,或者从android:textColorPrimary 来获取颜色,则系统会自动切换到合适的颜色。
除了这两个比较大的新功能以外,23.2 版本中还有如下改动,详细情况请参考这里:
·Design 库中新加一个bottom sheet控件。
·Support v4 的MediaBrowserServiceCompat
·RecyclerView 的自动计算本身大小的功能,这样RecyclerView就可以根据其内容的大小来设置自己的尺寸了。
·Custom Tabs更加好用。
·Leanback for Android TV 中新的 GuidedStepFragment,更加方便的创建新手指引。