Android support library 23.2新特性介紹
————————分割線————————
Android Support Library 23.2
說到Android支援庫,要意識到它不僅僅是一個單純的庫,而是整個能夠提供向後相容API的庫的集合,它能提供獨特的功能而不需要最新的平臺支援。23.2版本添加了一些新的支援庫,同時也為以前的庫添加了一些新的功能。
支援向量圖片和動態向量圖片
向量圖片允許你將PNG圖片替換為定義在XML中的單個向量圖片。向量圖片和動態向量圖片之前只能在Android5.0以上的裝置中實現,現在可以通過兩個新的支援庫support-vector-drawable和support-animated-vector-drawable來實現。
Android Studio 1.4 通過generating pngs at build time功能來實現對向量圖片的有限的支援。要禁用這個功能(以便充分利用支援庫的優點),你需要把 vectorDrawables.useSupportLibrary=true 新增到你的build.gradle檔案中。
// Gradle Plugin 2.0+ android { defaultConfig { vectorDrawables.useSupportLibrary = true } }
上面這種新屬性只能在Gradle2.0以上使用,如果你正在使用Gradle1.5,你應該用下面的方法:
// Gradle Plugin 1.5 android { defaultConfig { generatedDensities = [] } // This is handled for you by the 2.0+ Gradle Plugin aaptOptions { additionalParameters "--no-version-vectors" } }
VectorDrawableCompat支援API 7以上,而AnimatedVectorDrawableCompat支援API 11以上。Android的圖片載入方式導致了並不是每個能夠接受圖片ID的地方(比如XML檔案)都能支援向量圖片。不過慶幸的是,
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@drawable/ic_add" />
如果你想在執行 時改變圖片,可以繼續使用setImageResource()方法,跟以前一樣。使用AppCompat和app:srcCompat是把向量圖片整合到你的app裡的最簡單的方法。
AppCompat DayNight theme
儘管在你的app中能夠使用向量圖片已經是一個非常大的改變了,新的版本中又添加了一個新的主題:Theme.AppCompat.DayNight.
在API 14以前,DayNight主題以及後繼的DayNight.NoActionBar,DayNight.DarkActionBar, DayNight.Dialog等都會等效變成Light版本。但是在API 14 以及更高版本裝置中,該主題允許應用同時支援Light和Dark模式,並能夠在兩種模式之間輕鬆切換。
通常系統預設的是Night模式,但你可以使用AppCompatDelegate中的方法來改變這一值。你可以使用靜態的 AppCompatDelegate.setDefaultNightMode()方法來為整個應用設定預設的模式,也可以先通過getDelegate()取回AppCompatDelegate,然後使用setLocalNightMode()僅改變當前的Activity或Dialog的模式。
當使用AppCompatDelegate.MODE_NIGHT_AUTO時,系統就會根據一天的時間和你的上一次位置來自動切換白天和夜間模式。而MODE_NIGHT_NO和MODE_NIGHT_YES則強制使主題從不或總是使用夜間模式。
在DayNight主題中使用硬編碼的顏色很容易導致文字或者圖片在模式改變後看不清楚。如果為你的文字使用標準的TextAppearance.AppCompat風格或者來自於主題的顏色,如android:textColorPrimary,你會發現模式改變時顏色也會自動改變,從而提高可讀性。
如果你喜歡定製任何資源,尤其是對於夜間模式,AppCompat使用night資源限定資料夾來使定製任何資源成為可能。儘可能使用標準顏色或者利用AppCompat的著色支援,才能更容易地使用這一模式。
Design Support Library:Bottom Sheets
通過為CoordinatorLayout的子檢視新增BottomSheetBehavior(比如新增app:layout_behavior="android.support.design.widget.BottomSheetBehavior"),你便能夠獲得可以在下面五種狀態間自由變換的觸控選項。
- STATE_COLLAPSED:預設狀態,只顯示佈局沿著底邊的一部分。高度可以通過使用app:behavior_peekHeight來進行控制;
- STATE_DRAGGING:使用者直接將bottom sheet上拉或者下拉的一種中間狀態;
- STATE_SETTLING:檢視釋出與最終就位之間簡短的時間;
- STATE_EXPANDED:bottom sheet的充分擴充套件狀態。包括整個bottom sheet被完全顯示(如果其高度小於CoordinatorLayout容器)或整個CoordinatorLayout被充滿;
- STATE_HIDDEN:預設禁用(可使用app:behavior_hideable來啟用),啟用該狀態後就會允許使用者通過滑動來完全隱藏bottom sheet。
需要切記的是在bottom sheet中使用的滑動容器必須支援巢狀滑動(如NestedScrollView , RecyclerView , 或API21以上的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 sheet。只需要簡單地把AppCompatDialog替換為BottomSheetDialog以及把AppCompatDialogFragment替換為BottomSheetDialogFragment,你就可以實現一個bottom sheet風格的對話方塊。
Support v4:MediaBrowserServiceCompat
v4支援庫是許多支援庫的基礎,同時也將許多新的平臺版本才有的功能反向移植到舊版本中。
之前版本中使用MediaSessionCompat類來為媒體播放提供穩固的支援,最新的版本中添加了MediaBrowserServiceCompat類和MediaBrowserCompat類提供了一種相容的解決方案,可以把最新API才有的功能(甚至在Android6.0中才被新增的)帶到所有API4以上的裝置中。因為它提供了一個標準的介面來連線你的媒體播放服務和你的使用者介面,所以在Android汽車(Android auto)中播放音訊和在Android手錶(Android Wear)中瀏覽多媒體內容就變得十分容易了。
RecyclerView
要建立一個支援動畫效果的列表或者網格,RecyclerView是一種很好的選擇,它具有很大的靈活性。最新版本在LayoutManager中添加了一個令人激動的新功能:自動測量(auto-measurement)。這使得RecyclerView可以根據內容的尺寸來確定本身的大小。之前在定義RecyclerView的尺寸時使用WRAP_CONTENT是無效的,而現在則變為有效!你會發現在佈局管理器中建立的所有佈局現在都支援自動測量。
由於這項改變,你需要再三確認你列表項檢視的佈局屬性:以前被忽視的佈局屬性(如在滾動方向的MATCH_PARENT)現在都會完全支援。
如果你自定義的佈局管理器並沒有繼承自任何已建立的佈局管理器,你需要使用setAutoMeasureEnabled(true)方法,並且參考Java文件做一些小的變動。
雖然RecyclerView可以使其子檢視具有動畫效果,但當它自身的邊界改變時卻沒有動畫效果。如果你想在RecyclerView邊界改變時加入動畫,你可以使用Transition APIs.
Custom Tabs
自定義標籤(Custom Tabs)可以使你瀏覽網頁內容就像在使用app一樣。在最新版本中,你可以在網頁內容的底欄部分加入自定義的動作按鈕。
通過使用 addToolbarItem() 方法,你可以在底欄中新增最多5個動作按鈕,並且使用setToolbarItem()方法來設定它們。跟之前的setToolbarColor()方法類似,你也可以使用setScondaryToolbarColor()方法來設定底欄背景色。
Leanback for Android TV
其中最為顯著的變化可能就是第二列動作按鈕的引入(可以通過覆蓋onCreateButtonAction()方法或使用setButtonActions()方法來進行新增)。這使得無需滑動GuidedActions列表就能看到所有的動作按鈕。
說到GuidedActions,新版本提供了更加豐富的輸入選擇,包括可編輯的描述(使用discriptionEditable()方法)、可下拉子選單(使用subActions()方法)和日期選擇對話方塊(GuidedDatePickerAction).
在需要的時候,這些組間能夠讓你更容易地獲取使用者資訊。
Available Now(現在可用)
現在你可以直接通過SDK Manager和Android Studio更新到Android Support Library 23.2。好好利用這些新功能吧!