Android Support Library 23.2有哪些新東西(官網博客翻譯)

lynen 8年前發布 | 47K 次閱讀 Android開發 移動開發

來自: http://www.jcodecraeer.com//a/anzhuokaifa/androidkaifa/2016/0226/3996.html


原文: http://android-developers.blogspot.com/2016/02/android-support-library-232.html 

當我們談論安卓支持庫(Android Support Library)的時候,應該意識到這不是一個庫,而是一套庫的集合 ,它們旨在無需新平臺的情況下,提供API的向后兼容版本以及新功能。  23.2 版本添加了一些新的支持庫,同時還為現有的庫增加了新特性。

支持Vector Drawable 和 Animated Vector Drawable

Vector drawables 讓你可以用一個定義在XML里的矢量圖象替換多個png資源。而之前這一用法只局限于Lollipop以及更高的設備,VectorDrawable和AnimatedVectorDrawable現在可以分別通過兩個新的支持庫support-vector-drawable 和 support-animated-vector-drawable得到。

Android Studio 1.4 中介紹了一種通過 在編譯時生成png 的辦法對vector drawable提供了有限的支持。為了禁用這個功能(節省支持庫的空間,真正受益于新的庫),你需要在 build.gradle文件里添加vectorDrawables.useSupportLibrary = true :

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

需要注意這個新的屬性只有2.0版本的Gradle Plugin中才有。如果你正在使用Gradle 1.5 ,則應該使用

 // Gradle Plugin 1.5  
 android {  
   defaultConfig {  
     generatedDensities = []  
  }  

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

你可以使用兼容到API7的VectorDrawableCompat和兼容到API11或者更高的AnimatedVectorDrawableCompat。鑒于安卓加載drawable的方式,并不是每個接受drawable id的地方(比如在一個XML文件中)都支持加載vector drawable。幸好,AppCompat 添加了幾個功能讓你更容易使用新的vector drawable。

首先,當你和ImageView(或者例如 ImageButton 和 FloatingActionButton這樣的子類) 一起使用AppCompat的時候,你可以使用新的app:srcCompat屬性來飲用 vector drawable(而任何其它drawable則用 android:src):

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

并且,如果你要在運行時動態的改變drawable,你可以使用和之前相同的 setImageResource() 方法 - 這點并沒有變。使用AppCompat和app:srcCompat是在app中集成vector drawable最簡單可靠的方式。

你會發現在Lollipop之前直接在app:srcCompat之外引用vector drawable會失敗。但是AppCompat卻支持其它drawable 容器比如StateListDrawableInsetDrawableLayerDrawableLevelListDrawable, 或者 RotateDrawable加載vector drawable。使用這種間接的方法,你可以在這種情況下使用vector drawable,比如TextView的 android:drawableLeft 屬性,本來在正常情況下,它是不支持vector drawable的。

AppCompat夜間白天主題

雖然在能各個版本的app中使用矢量圖像已經是一個很大的變化了,但是這個版本還在AppCompat中添加了一個新主題:Theme.AppCompat.DayNight。

blob.png  blob.png

在API 14,之前,DayNight theme以及它的繼承者DayNight.NoActionBar, DayNight.DarkActionBar, DayNight.Dialog等和light是一樣的。但是在API 14 a或者跟高設備上,這個主題可以輕易的讓app既支持Light又支持 Dark theme。可以根據是否為“night”從一個Light 主題切換到Dark主題。

默認情況下,是不是‘night’跟系統的值(從UiModeManager.getNightMode()得到)是對應的,但是你可以使用AppCompatDelegate中的方法覆蓋這個值。對于這個貫穿整個app(直到進程重啟)的默認值,你可以使用靜態的AppCompatDelegate.setDefaultNightMode()方法去設置,或者你可以通過getDelegate() 得到一個AppCompatDelegate,并使用setLocalNightMode()去改變當前的Activity或者對話框。

當使用AppCompatDelegate.MODE_NIGHT_AUTO時,一天的時間和最近的地點(如果你的app有地理位置權限)會被用于自動切換白天和黑夜,而MODE_NIGHT_NO 和 MODE_NIGHT_YES 則分別用于強制主題從不或者總是使用dark theme。

在使用DayNight主題的時候,務必要徹底測試一下app,因為硬編碼顏色容易造成可讀性差的文字和圖標(沒看懂)。如果你的text使用的是標準的 TextAppearance.AppCompat樣式或者顏色是從主題里(比如從 android:textColorPrimary)得到的,你會發現這些都會自動幫你更新。

但是,如果你想專門為夜間模式自定義任何資源,可以在AppCompat的 night resource qualifier folder(夜間資源目錄)里自定義你需要的任何資源。為了讓對這個模式的支持變得更輕松,請考慮使用標準的顏色或者利用AppCompat的tinting (著色)。

Design Support Library: Bottom Sheets

Design Support Library 提供了許多 material design 設計模式的實現。這個版本讓開發者可以輕松的把 bottom sheet 添加到他們的app中。

blob.png

通過為 CoordinatorLayout的子View設置一個BottomSheetBehavior(比如:app:layout_behavior=”android.support.design.widget.BottomSheetBehavior”),你將自動得到能在5個狀態間切換的觸摸檢測功能:

  • STATE_COLLAPSED: 這是折疊狀態 ,也是默認的狀態。只是在底部邊沿顯示布局的一部分。其高度可以使用 app:behavior_peekHeight 屬性來控制(默認是0)。    

  • 這是中間狀態,此時用戶直接上下拖動 bottom sheet。

  • STATE_SETTLING: 視圖被釋放之后-到達最終位置之間的瞬間。 

  • STATE_EXPANDED:   bottom sheet完全展開的狀態。 整個bottom sheet都是可見的(如果它的高度小于包含它的CoordinatorLayout)或者整個CoordinatorLayout都是填滿的。

  • STATE_HIDDEN:  默認禁用是的(使用app:behavior_hideable屬性來啟用 ), 如果這個啟用,用戶可以在 bottom sheet中下滑以完全隱藏bottom sheet 

記住,bottom sheet 中的滾動容器必須支持嵌套滾動(比如,NestedScrollViewRecyclerView, 或者 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 的情景,但是這個版本還提供了BottomSheetDialog 和 BottomSheetDialogFragment 來完成 模態 bottom sheets 的用例。把AppCompatDialog 或者 AppCompatDialogFragment替換成相應的bottom sheet版本即可。讓你的對話框使用bottom sheet風格的樣式。

Support v4: MediaBrowserServiceCompat

Support v4 library 作為許多支持庫的基礎,包含了許多在較新版本中才引入的framework功能(以及幾個獨特的功能)。

在上個版本中添加的 MediaSessionCompat 類為媒體播放提供了堅實的基礎,這個版本我們添加了MediaBrowserServiceCompat 和 MediaBrowserCompat ,把最新的API(甚至是Marshmallow中添加的那些)向后兼容到API 4 及以上。這讓支持Android Auto上的音頻播放,Android Wear 上的媒體瀏覽變得簡單多了。另外,還為連接media playback service和UI提供了一個標準的接口。

RecyclerView

RecyclerView 控件提供了靈活一種創建列表和網格的基本方案,而且還支持動畫。這個版本為 LayoutManager API帶來了一個非常激動人心的新特性:自動測量!讓RecyclerView可以根據其內容的大小調整自己。這意味著以前那些無解的場景,比如對RecyclerView的一個dimension 使用WRAP_CONTENT成為了可能。你會發現所有的內置LayoutManager現在都支持自動測量。

因為這個變化的原因,你得仔細檢查 item view的 layout parameters 了:以前會被自動忽略的 layout parameters(比如在滾動方向上的MATCH_PARENT ),現在會被完全考慮進去。如果你有一個自定義的LayoutManager,且沒有繼承自內置的LayoutManager,那么這就是一個可選的API - 你需要調用setAutoMeasureEnabled(true) 并且根據這個方法的Javadoc中的描述做一些微小的改變。

注意,雖然RecyclerView可以讓自己的子View動畫,但是它不能動畫自己的邊界改變。如果你想要讓RecyclerView的邊界變化也呈現動畫,你可以使用 Transition API

Custom Tabs

Custom Tabs 可以在保持app風格與外觀的同時無縫切換到web內容頁。而在這個版本中,你可以向一個顯示在web內容旁邊的底部bar添加操作項。注:以前只能在頂部的溢出菜單里面添加。

blob.png


有了新的 addToolbarItem()方法,你就可以添加最多5個(MAX_TOOLBAR_ITEMS)actions到bottom bar 上,并使用setToolbarItem() 來更新它們。類似于之前的setToolbarColor()方法,你可以找到一個 setSecondaryToolbarColor() 方法來自定義bottom bar的背景顏色。

Leanback for Android TV

Leanback 庫給了你把app帶到Android TV  上所需要的工具, 里面有許多專門為TV而優化的控件。這個版本的GuidedStepFragment 做了一些列重大改進。

blob.png

最大的改變可能就是引入了action button的第二列(通過重寫onCreateButtonActions()或者調用 setButtonActions()來添加)。不需要滾動完一個 GuidedActions列表就能到達所有的action。

說到GuidedAction,有幾個讓輸入更佳豐富的新特性,包括editable descriptions (通過descriptionEditable()), 表單中dropdown里面的sub action(用 subActions()),以及GuidedDatePickerAction。

blob.png

這些控件讓你更容易從用戶那那里得到信息。

Available Now

Android Support Library的23.2版本現在可以通過 SDK Manager和Android Studio下載。bug報告到b.android.com ,聯系開發者到Android 開發 Google+ 社區

 本文由用戶 lynen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!