Android Support Library 23.2介绍(翻译自官方文档)

Android Support Library 23.2

(译者注:本文标注了部分文字链接,但须要科学上网,要查看全部链接。请查看原文
作者 Ian Lake, Developer Advocate

首先你要知道Android Support Library不是单个庞大的库。而是一个系列。这一系列库提供了向后兼容的API,以及在旧版本号的安卓平台上也能使用的支持库特有的特性。

23.2版本号提供了几个支持库,并在已有的支持库中加入了一些新功能。

youtube介绍视频

支持 Vector Drawables 和 Animated Vector Drawables  

有了Vector Drawables,原来须要在assets放入多张png图片才干完毕的绘制,如今仅仅须要在xml中定义好矢量图就可以。之前Vector Drawables仅仅支持Lollipop以上的版本号。如今有了相应的支持库:support-vector-drawable库支持VectorDrawable,support-animated-vector-drawable 支持AnimatedVectorDrawable

Android Studio 1.4对Vector Drawables做了有限的支持,即在编译阶段生成png图 要取消这一支持(同一时候真正利用Vector Drawables以及节省空间)。你须要在build.gradle文件里加上 vectorDrawables.useSupportLibrary = true :

// Gradle Plugin 2.0+  
 android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
    }  
 }  

这个属性仅仅在2.0版本号的Gradle Plugin可用。假设你使用的是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"  
  }  
 }  

你能够在API 7以上使用VectorDrawableCompat,在API 11 以上使用AnimatedVectorDrawableCompat。因为载入drawables的机制不同,不是每一个使用drawable id的地方(比方xml文件里)都支持vector drawables。但不用操心,AppCompat 已经加入了非常多功能以方便你使用vector drawables

首先。当结合AppCompat使用ImageView(或者其子类,比方ImageButtonFloatingActionButton)时你能够使用属性app:srcCompat来引用vector drawables资源(这个属性也能够引用其它android:src支持的drawable 资源)

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

假设你须要执行时改变图片资源。仅仅须要跟曾经一样使用setImageResource(),没有不论什么改变。要在你的应用中引入vector drawables,AppCompat 和 app:srcCompat 是最保险的方法。

要在Lollipop之前的版本号直接使用vector drawables。仅仅能通过app:srcCompat。

可是AppCompat还支持从drawable 容器(比方StateListDrawable, InsetDrawable, LayerDrawable, LevelListDrawable, 和 RotateDrawable)中载入vector drawables。

利用这一点,你能够在 TextView的android:drawableLeft等情况下使用矢量图。(译者注,比方

<TextView
    android:drawableLeft="@drawable/state_list_icon" /> 

 //drawable容器地址 res/drawable/state_list_icon.xml
<selector xmlns:android="...">
    <item android:state_checked="true"   
            android:drawable="@drawable/checked_icon" />
    <item android:drawable="@drawable/icon" />
</selector>

//矢量图地址 res/drawable/checked_icon.xml
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="32dp"
    android:viewportWidth="32"
    android:height="32dp"
    android:viewportHeight="32">

    ...

</vector>

AppCompat DayNight 主题

除了对矢量图的支持这一重大功能。这个版本号的AppCompat还添加了新的主题:Theme.AppCompat.DayNight.

这里写图片描写叙述

这里写图片描写叙述

在API 14 曾经。DayNight主题及其子主题 DayNight.NoActionBar, DayNight.DarkActionBar, DayNight.Dialog等是Light的效果。但在API 14及更高版本号,DayNight主题能让APP依据是否是夜晚(night)在Light主题和Dark主题间自如切换

默认是依据系统值(由UiModeManager.getNightMode()得出)来确定是否是夜晚,但你也利用AppCompatDelegate里的方法覆写这个值。

通过 static AppCompatDelegate.setDefaultNightMode() 方法,你能够设置APP级别的默认值(直到进程重新启动)。也能够通过getDelegate() 方法获得一个AppCompatDelegate。然后使用setLocalNightMode来单独设置当前Activity或Dialog的主题。

AppCompatDelegate.MODE_NIGHT_AUTO这以属性将依据时间和近期一次记录的地理位置(假设你的app有地理位置权限(location permissions))来自己主动切换白天和夜晚的主题,而 MODE_NIGHT_NO 意味着禁止使用夜晚的主题,MODE_NIGHT_YES意味着总是使用夜晚的主题。

非常重要的一点,当应用DayNight 主题时。你须要全面的測试你的app,因为硬编码的颜色非常easy让文字和图标难以辨认。当你在主题的文字和颜色设置项中使用的是 标准的 TextAppearance.AppCompat 样式,你会发现这个问题已经帮你处理好了。

还有一方面。假设你想要为夜晚的模式自己定义不论什么资源。AppCompat将重用夜晚模式资源限定名目录, 使你能自己定义不论什么你想要的资源。

请考虑使用标准色或者AppCompat中的tinting功能来简化这个模式的使用。

设计支持库: Bottom Sheets

设计支持库 提供了多种 material design 模式的实现。这个版本号它将让开发人员能简单的在APP中使用 bottom sheets(翻译过来是底部栏的意思) .

这里写图片描写叙述

仅仅要在CoordinatorLayout的子View上加入BottomSheetBehavior(比方加上app:layout_behavior=”android.support.design.widget.BottomSheetBehavior”)。你就能够适当的监听用户的触屏事件。触屏事件有以下5种状态:

  • STATE_COLLAPSED: 默认的折叠状态。 bottom sheets仅仅在底部显示一部分布局。显示高度能够通过 app:behavior_peekHeight 设置(默认是0)
  • STATE_DRAGGING : 过渡状态。此时用户正在向上或者向下拖动bottom sheet
  • STATE_SETTLING: 视图从脱离手指自由滑动到终于停下的这一小段时间
    *STATE_EXPANDED: bottom sheet 处于全然展开的状态:当bottom sheet的高度低于CoordinatorLayout容器时,整个bottom sheet都可见;或者CoordinatorLayout容器已经被bottom sheet填满。
    STATE_HIDDEN : 默认无此状态(可通过app:behavior_hideable 启用此状态),启用后用户将能通过向下滑动全然隐藏 bottom sheet

请记住。bottom sheet中的滑动容器(scrolling container)必须支持嵌套滑动(比方 NestedScrollView, RecyclerView, 或者API 21以上的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( persistent bottom sheet)的场景, 但这个版本号还提供了BottomSheetDialog 和 BottomSheetDialogFragment 来实现 modal bottom sheets的场景。仅仅须要将AppCompatDialog 或者AppCompatDialogFragment分别替换成上述的两个控件。你就拥有了 bottom sheet 风格的对话框。

v4支持库: MediaBrowserServiceCompat

v4支持库既是支持库系列中的基础库,也包括了非常多在较新版本号的平台中才引入的框架级特性(也含有非常多支持库特有的特性

在之前的版本号,我们引入了MediaSessionCompat 类,以给力的支持媒体播放。此版本号我们又加入了MediaBrowserServiceCompat 和 MediaBrowserServiceCompat,以便支持在API 4 或更高版本号上使用最新的API(甚至是Marshmallow刚引入的)。这样在Android Auto 上的音频播放以及Android Wear上的媒体浏览将更简单,同一时候也提供了统一的接口来关联媒体播放服务和UI。

RecyclerView

RecycleView控件提供了高级灵活的方式来生成list和grid,也支持动画。这个版本号的 LayoutManager API 有了激动人心的新特性:auto-measurement!它使得RecyclerView能依据所包括的内容来确定自己的尺寸。这意味着之前不可用的某些场景。比方WRAP_CONTENT属性在RecycleView中的应用,如今已经能够应用了。

你会发现全部库已有的LayoutManagers子类都默认支持auto-measurement

因为上述的改变,请务必细致检查你写的item views的布局參数:之前被忽略的布局參数(比方滑动方向的MATCH_PARENT)如今将发挥作用。

假设你自己定义的 LayoutManager 子类并不继承自库已有的LayoutManagers子类, auto-measurement 将是一个可选的 API ——通过 setAutoMeasureEnabled(true) 以及该方法的凝视文档(Javadoc)中所提到的一些细微的改变。

请注意 RecyclerView 能够在子view上附加动画,但并不支持自己边界改变的动画。假设你须要bounds边界改变时有动画效果,请使用 Transition APIs.

Custom Tabs

Custom Tabs使得向web内容的无缝过渡成为可能,同一时候保持APP的外观格调。

在此版本号,你将能为底部栏(bottom bar)加入操作项(action),显示在web内容旁边。

这里写图片描写叙述

有了新的addToolbarItem()方法,你将(眼下)能加入5(MAX_TOOLBAR_ITEMS)个操作项,并在之后使用setToolbarItem()更新这些操作项。跟之前的setToolbarColor() 方法相似,自己定义底部栏背景颜色的方法是setSecondaryToolbarColor()

Leanback for Android TV

Leanback Library 库提供了一些工具来帮助你更简单的将APP移到 Android TV 上,并优化一些标准组件以适应电视体验。GuidedStepFragment在这个版本号中有了重大的多处的改进。


这里写图片描写叙述

最直观的改变或许是操作button的二级栏的进入(通过覆写onCreateButtonActions方法或者调用setButtonActions()方法)。这样用户不须要滑动整个可用GuidedActions的list就能够完毕操作流程。

说到GuidedActions,此版本号加入了非常多新特性来丰富用户输入,包括可编辑的描写叙述(通过descriptionEditable()),拉下菜单形式的二级操作(通过subActions),以及GuidedDatePickerAction。

这里写图片描写叙述

当你确实须要从用户那儿获取信息时,这样组件是你的好帮手。

现已公布

通过 SDK Manager 和 Android Studio,你就能获取23.3版本号的安卓支持库。

立即開始使用全部最新的功能吧!我们还修复了一些bug哦。跟曾经一样,请在b.android.com上报告bug,在 Google+ 社区安卓开发板块 跟其它开发人员交流

Reto Meier 上传

posted @ 2017-08-17 12:17  lytwajue  阅读(1140)  评论(0编辑  收藏  举报