zoukankan      html  css  js  c++  java
  • 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 上传

  • 相关阅读:
    Flink 源码阅读环境搭建并调试 Flink-Clients 模块
    阅读 Flink 源码前必会的知识 SPI 和 Classloader
    如何 debug hive 源码,知其然知其所以然
    Flink SQL 核心概念剖析与编程案例实战
    Apache Flink 如何正确处理实时计算场景中的乱序数据
    Flink 编程接口
    Flink JobManager 和 TaskManager 原理
    一文带你了解 Flink 的基本组件栈
    flink有什么优势值得大家这么热衷
    实时计算数据架构的演变
  • 原文地址:https://www.cnblogs.com/lytwajue/p/7380921.html
Copyright © 2011-2022 走看看