AppCompat 22.1,Google暴走,MD全面兼容低版本
武俠相關的文學作品中常用“四十歲后不滯于物,草木竹石均可為劍。自此精進,漸入無劍勝有劍之境。”形容一個人的武功技藝高超,已臻化境。而我們IT工程師自身的技藝水平到達一定程度后,也會處于這種“無碼勝有碼”的境界。但這是什么意思呢?是說我們從此不再寫代碼,每天躺在床上和白花花的天花板無言對望了嗎?
不是的。我想對你說的是:你寫下的每一行代碼應該能為應用增加獨特的價值,而不是為應用添加一行又一行繁復、無趣的模板代碼。Android 提供支持庫的初衷正是如此:讓 Android 開發工程師把精力更多地放在邏輯實現上,而不是寫業務代碼。
最新發布的 Android 支持庫一如既往地添加了許多實用的組件,并對 Support V4、AppCompat、Leanback、RecyclerView、Palette 和 Renderscript 庫的內部實現邏輯作出改變。從新的 AppCompatActivity 和 AppCompatDialog 到 Android TV 全新的引導流程我們可以發現,新的庫確實帶來許多讓我們耳目一新的驚喜。
Support V4
Support V4 庫作為眾多 Android 支持庫的基礎,包含許多向下兼容的類,大大簡化了向下兼容的具體實現。
DrawableCompat 現在使drawable著色繪制向下兼容到了API 4:現在只需要通過 DrawableCompat.wrap(Drawable) 方法簡單封裝你的 Drawable ,就可以用 setTint()、setTintList()、setTintMode() 完成著色繪制,完全不需要為了支持多種顏色而去創建和維護幾個不同的 Drawable 文件!
此外,我們正在通過 ColorUtils 類做一些適用于所有使用場景的 Palette 內部構件,為開發者提供預先構建的工具簡化處理各種顏色的操作。ColorUtils 可以很容易地計算出顏色之間的對比度,確定維持最小對比度的最小透明度值(完美地保證文字的閱讀體驗),或者將顏色轉換為對應的 HSL 值。
插值器是所有動畫系統的重要組成部分,它負責控制一個動畫中某項數值改變的比率(例如加速、減速等)。Lollipop 中的 android.R.interpolator 包內置了許多插值器,例如用于創建真實動作的 fast_out_linear_in、fast_out_slow_in、and linear_out_slow_in。但現在我們可以用代碼調用 FastOutLinearInInterpolator、FastOutSlowInInterpolator、LinearOutSlowInInterpolator 類為動畫添加這些插值器。除了那些預建的插值器,我們還創建了允許你創建二次方或三次方貝塞爾曲線的 PathInterpolatorCompat 類
這個版本的支持庫還把Space控件從GridLayout庫移動到了Support V4,使其不需要在項目中添加單獨的依賴。Space控件是一種輕量的、無形的控件,可用于創建控件間的間隙效果。
AppCompat
AppCompat支持庫開始地很低調,卻是一個很重要的開端:為API 7及以上的設備提供了一個一致的Action Bar。 在版本21的修訂中,它承擔了新的職責:帶來了material color palette、控件著色、Toolbar支持,還有更多支持所有API 7+的設備。單從ActionBarActivity名字上看是體現不出它全部功能的。
在此版本中,ActionBarActivity已經過時了,新的替代者是AppCompatActivity。然而,這不只是一個重命名。事實上,AppCompat的內在邏輯現在可以通過AppCompatDelegate實現-這是一個可以在所有Activity中包含的類,與合適的生命周期方法掛鉤,并得到一致的主題、著色等,而不需要使用AppCompatActivity (盡管這仍然是最簡單的開始方式)。
在全新的 AppCompatDelegate 類的幫助下,我們通過 AppCompatDialog 類提供了符合 Material Design 規范的對話框。如果你以前用過 AlertDialog ,那你就爽翻了,因為我們還在庫里添加了全新的 support.v7.app.AlertDialog 類,讓你用相同的API享受 AppCompatDialog 帶來的便利。
在使用 AppCompat 時,自動為控件著色的能力是在應用中保持品牌烙印和一致性體驗的重要保證。因為在填充布局時 AppCompat 會自動地為你將諸如 Button、TextView 這些傳統控件替換為 AppCompatButton、AppCompatTextView 等新控件,以確保布局內的每一個控件都能支持著色。而在新的支持庫中,色彩感知控件現在已經被公開,讓控件類對自動著色的支持能延續到子類中。
這個列表囊括了目前所有的色彩感知控件:
AppCompatAutoCompleteTextView?
AppCompatButton?
AppCompatCheckBox?
AppCompatCheckedTextView?
AppCompatEditText?
AppCompatMultiAutoCompleteTextView?
AppCompatRadioButton?
AppCompatRatingBar?
AppCompatSpinner?
AppCompatTextView
Lollipop 能夠在 View 層通過使用XML中的 android:theme 屬性在 View 中重寫應用的主題,這對實現許多酷炫的應用 UI 非常有幫助,例如:我們需要在明亮主題的 Activity 中使用暗黑風格的 ActionBar。但現在 AppCompat 允許你在所有 API 11 以上的設備上通過 android:theme 定制 Toolbar。
如果你不太熟悉 AppCompat 庫的話,不妨看看這個視頻,你會發現在 Android 中為用戶提供一致性體驗是多么簡單:
Leanback
即使 Leanback 庫已經是 Android TV 應用中的最佳模板,但如果你看過最新的22.1支持庫,你會發現通過最新的 Leanback 庫創建的引導流程,會帶來比過去好上10倍的體驗。
在最新的 Leanback 庫中,這些類和主題可以在 Android TV 中建立酷炫的引導流程:左邊是引導視圖,右邊是引導步驟。引導流程的每一個步驟都可以通過繼承自 Theme.Leanback.GuidedStep 的 theme 來自定義,如果你想要更高的定制自由度,你可以通過 GuidanceStylist 和 GuidedActionsStylist 實現你的需求。
除此以外,Android Support Library 22.1 修復了 Leanback 中的許多 Bug,優化性能,還對外聲稱:讓用戶和開發者通過 Leanback 庫獲得極致的體驗是 Google 開發、優化 Leanback 庫的目標!
RecyclerView
除了修復了一系列的 Bug,此版本還增加了新的 SortedList 數據結構。這個集合讓持有有序自定義對象比過去簡單,使 RecyclerView.Adapter 在數據發生改變時能夠正確地分發改變的事件,維持子 Item 在增加/刪除/移動/改變 時的動畫。
此外,SortedList還支持成批地改變對象,事件分發只是適配器上一個單一的集合操作,確保大量items改變時能維持最佳的用戶體驗。
Palette
如果你有在應用開發時使用 Palette 提取圖片中的顏色,那你肯定會很高興,因為最新的 Palette 在保證了取色準確度的情況下,取色效率是以前的6-8倍!
Palette 現在通過構造者模式獲得實例,而不像從前那樣通過調用類似 Palette.generate(Bitmap) 的方法來獲得,你現在需要用 Palette.from(Bitmap) 獲得 Palette.Builder 對象,然后才能在頂用 generate() 或 generateAsync() 取得顏色表前改變運行 Palette 時能產生的最大顏色數和最大圖片尺寸
Renderscript
Renderscript 能提供強大的計算能力,此外 Android Support Library 22.1 使一些預定義的腳本和調用腳本的內部函數在 API 8 以上的設備上也可以使用。通過一種改進的圖像邊緣檢測算法確保本地的 Renderscript 函數總是選擇了最快和最可靠的實現,這個版本極大地提升了所有設備的可靠性和性能表現。兩個額外的內部函數也被添加在此版本中:ScriptIntrinsicHistogram 和 ScriptIntrinsicResize,完成采集到10。
結語
沒有比這更好的時間來開始使用Android支持庫。今天你就可以使用這個庫開始開發了,從Android SDK Manager下載Android支持庫和Android支持資源吧。
要了解更多關于Android的支持庫和它提供給你的API,請訪問Android開發者官網上的支持庫章節的網頁。
總結
以上是生活随笔為你收集整理的AppCompat 22.1,Google暴走,MD全面兼容低版本的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2015-04-22记录--一些JS疑惑
- 下一篇: 关于spring事务管理