AndroidSupportLibrary23.2重磅更新

2月25凌晨Google正式发布了android-support-library-23.2支持库,一大早微信群里面都在热议不止,开发者们的福音。这一次23.2版本增加了一些新的支持库以及新的功能,许多现有的库,还把之前的library小学生问题修复了,可喜可贺。闲言碎语不要讲,直接切入正题。(文中链接记得自备梯子)

YouTube观看链接Android Support Library

原文Android Developers Blog

中文翻译

本次更新主要涉及:

  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

1.Support Vector Drawables and Animated Vector Drawables(支持矢量图片和矢量图片动画)

Vector Drawables让你用一个矢量图片,替换定义在XML中的多个PNG资源。而此前只支持L版本或者更高的设备版本,通过support-vector-drawable和support-animated-vector-drawable两新的支持库分别支持矢量图片和矢量图片动画。
AndroidStudio1.4已经引入过矢量绘图支持在构建时生成PNG图像。要想禁用此功能(并想使用最新支持库),你需要在你的build.gradle里面添加vectorDrawables.useSupportLibrary = true

1
2
3
4
5
6
// Gradle Plugin 2.0+  
android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}

你会发现这个新的属性只在AndroidStudio2.0版本存在。如果您使用的是AndroidStudio1.5,需要

1
2
3
4
5
6
7
8
9
10
11
// Gradle Plugin 1.5  
android {
defaultConfig {
generatedDensities = []
}

// This is handled for you by the 2.0+ Gradle Plugin
aaptOptions {
additionalParameters "--no-version-vectors"
}
}

VectorDrawableCompat支持API7+,AnimatedVectorDrawableCompat支持API11+。
由于android的图片加载机制的限制,不是所有支持图片id的地方(例如xml文件里)都能使用矢量图。值得一体的是,AppCompat已经增加了许多功能,可以很容易地使用新的矢量绘图资源。
首先,当我们在ImageView(或子类,如ImageButton和FloatingActionButton)中使用Appcomat,你就可以使用新属性app:srcCompat来引用矢量图片(也可以在android:src中以及任何其他可用的地方使用图片)。

1
2
3
4
<ImageView   
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
app:srcCompat = "@drawable/ic_add" />

如果你在运行时(java代码中)更改drawable,你也可以使用相同的setImageResource()和以前一样没有变。使用AppCompat和 app:srcCompat是将矢量图片集成到app的最简单的方法。
你会发现在L版本中不使用app:srcCompat引用矢量图都是无效的。然而,当矢量图被另一个drawable container(例如StateListDrawableInsetDrawableLayerDrawableLevelListDrawableRotateDrawable )引用时,AppCompat是可以加载的。所以,在一些无法直接使用AppCompat(直接使用app:srcCompat)的地方通过这种间接使用,也可以在矢量图片中使用类似 TextView’s android:drawableLeft属性。

2.AppCompat DayNight theme(DayNight 主题)

此前API14,该DayNight主题以及DayNight.NoActionBar, DayNight.DarkActionBar,DayNight.Dialog等等,提供了相同的亮度。但在API 14和更高版本的设备,这个主题可以让应用程序可以轻松地支持 白天和夜晚的主题,根据是否是“夜晚”来决定主题是否从白天切换到夜晚主题。
默认情况下,是否是“夜晚”是由系统值(UiModeManager.getNightMode())决定,但你可以重写该方法AppCompatDelegate中的值来设置。你将能够在整个应用程序中设置默认值(直到进程重新启动)与静态AppCompatDelegate.setDefaultNightMode()或通过 getDelegate()) 得到AppCompatDelegate对象,并使用setLocalNightMode()来设置当前的Activity或Dialog的主题。
当使用AppCompatDelegate.MODE_NIGHT_AUTO,它会时刻知道你最后的位置和时间(如果您的应用程序已开启位置权限)用于白天和黑夜之间自动切换的依据。MODE_NIGHT_NO 和 MODE_NIGHT_YES 则分别强制设定了从不或是一直使用夜晚主题。
这是您在使用白天主题的时候彻底测试你的应用程序的关键,因为白天主题的亮度很可能导致一些文字或者图标变得不可阅读。如果您使用的是标准TextAppearance.AppCompat 从你的主题样式android:textColorPrimary为你的文本或颜色,你会发现这些为你自动更新。

3.Design Support Library: Bottom Sheets(材料设计,底部表)

通过附加一个BottomSheetBehavior到子视图的CoordinatorLayout(添加app:layout_behavior =“android.support.design.widget.BottomSheetBehavior”),通过对BottomSheet的操作我们可以得到它的五种状态。

  • STATE_COLLAPSED:关闭Bottom Sheets,高度可控属性app:behavior_peekHeight(默认为0)
  • STATE_DRAGGING:在用户直接拖动Bottom Sheets向上或向下的中间状态
  • STATE_SETTLING:当Bottom Sheets被释放和沉降到其最终位置记录的状态
  • STATE_EXPANDED:Bottom Sheets展开时的状态
  • STATE_HIDDEN:默认情况下禁用(和启用应用程序:behavior_hideable属性),这使得用户可以向下滑动Bottom Sheets完全隐藏底部

请记住,你的底部滚动容器必须支持嵌套滚动(例如,NestedScrollView, RecyclerView, or ListView/ScrollView on API 21+)。
如果需要监听Bottom Sheets回调时的状态,可以通过BottomSheetCallback来实现。

1
2
3
4
5
6
7
8
9
10
11
12
13
// The View with the BottomSheetBehavior  
View bottomSheet = coordinatorLayout.findViewById(R.id.bottom_sheet);
BottomSheetBehavior behavior = BottomSheetBehavior.from(bottomSheet);
behavior.setBottomSheetCallback(new BottomSheetCallback() &#123;
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) &#123;
// 监听上述5种状态的变化
&#125;
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) &#123;
// 拖拽中的回调
&#125;
&#125;);

虽然BottomSheetBehavior能够捕获持续bottom sheet的情况,此版本还提供了一个BottomSheetDialog和BottomSheetDialogFragment填补了model bottom sheets使用情况。只需更换AppCompatDialogAppCompatDialogFragment作为底片。

4.Support v4: MediaBrowserServiceCompat

Support v4库用作许多支持库的基础,并且为一些新版本介绍的特征提供支持(backports)。
添加到以前发布的MediaSessionCompat类,为媒体播放了提供了坚实的基础,这个版本增加了MediaBrowserServiceCompat和MediaBrowserCompat提供,带来了最新的API兼容的解决方案(甚至没有在L设备上加)支持API4+。这使得我们更容易地在Android上支持媒体的播放和在Android Wear上浏览媒体,为我们提供了一个标准的接口,让你的媒体播放服务与界面连起来。

5.RecyclerView

最新的RecyclerView目录结构如下

RecyclerView组件为我们提供了灵活的创建列表和网格以及动画的特性。这个版本带来一个激动人心的新特性LayoutManager API:自动测量!!!这允许RecyclerView尺寸大小根据其内容的大小尺寸定制。这意味着,先前不可用的情况,例如使用WRAP_CONTENT为尺寸的RecyclerView,现在都是可能的。你会发现所有内置的布局管理现在都支持自动测量。
由于这种变化,一定要确保你的item的布局属性:以前被忽视的布局参数(如MATCH_PARENT的滚动方向)现在将不一样。
如果你有一个自定义的LayoutManager并且不是基于之前的拓展,有一个选择就是你可以调用setAutoMeasureEnabled(true),以及做一些小的变化(详情见Javadoc)来支持新特性
注意,虽然RecyclerView支持动画,但是他不支持自己动画边界变化,如果你想对RecyclerView边界进行动画处理,你可以使用 Transition APIs.

6.Custom Tabs(自定义选项卡)。

Custom Tabs能够同时保持你的应用程序的外观和感觉无缝地过渡到Web内容。在这个版本中,您现在就可以行动加入底栏显示旁边的网页内容。

有了新加的addToolbarItem(),你现在可以在底栏增加五种动作,并且一旦会话开始就可以使用 setToolBarItem()更新他们,你还会发现一个setSecondaryToolbarColor()自定义底栏的背景颜色。

7.Leanback for Android TV

AndroidTV
请看原文,对这方面了解甚少,就不嚯嚯读者了。。

动手吧!!!
Android的支持库的版本23.2是通过您的SDK管理器和Android Studio中更新可用。充分利用所有的新特性以及其他bug修复从现在开始!与往常一样,在提交错误报告b.android.com并与其他开发人员交流的Android开发Google+社群

版权声明:



除非注明,本博文章均为原创,转载请以链接形式标明本文地址。

坚持原创技术分享,您的支持将鼓励我继续创作!