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