[Android]view筆記

Android大致分為了四層,即Linux內(nèi)核層、庫(kù)和運(yùn)行時(shí)、Framework層和應(yīng)用層。

Dalvik與ART

Dalvik包含了一整套的Android運(yùn)行環(huán)境虛擬機(jī),每個(gè)App都會(huì)分配Dalvik虛擬機(jī)來(lái)保證互相之間不受干擾,并保持獨(dú)立。它的特點(diǎn)是在運(yùn)行時(shí)編譯。打個(gè)比方,就好比你買(mǎi)了一輛可折疊的自行車(chē),平時(shí)是折疊的,只有騎的時(shí)候,才需要組裝起來(lái)用。而在Android 5.X版本開(kāi)始,ART模式已經(jīng)取代了Dalvik, ART采用的是安裝時(shí)就進(jìn)行編譯,以后運(yùn)行時(shí)就不用編譯了,這就好比你買(mǎi)了輛組裝好了的自行車(chē),裝好就可以騎了。當(dāng)然,對(duì)在其虛擬機(jī)環(huán)境中運(yùn)行的大部分App來(lái)說(shuō),它們都運(yùn)行著同樣的代碼。

Android應(yīng)用程序會(huì)在如下所示的幾個(gè)時(shí)間點(diǎn)創(chuàng)建應(yīng)用上下文Context。

創(chuàng)建Application

創(chuàng)建Activity

創(chuàng)建Service



IDE是無(wú)法完成的,比如自動(dòng)化編譯、定制編譯、版本控制、自動(dòng)測(cè)試等。因此Android與很多語(yǔ)言一樣,引入了Makefile機(jī)制。



圖片發(fā)自簡(jiǎn)書(shū)App

view樹(shù)結(jié)構(gòu)圖


圖片發(fā)自簡(jiǎn)書(shū)App

ui界面架構(gòu)圖


圖片發(fā)自簡(jiǎn)書(shū)App

標(biāo)準(zhǔn)視圖樹(shù)


類(lèi)——MeasureSpec類(lèi),通過(guò)它來(lái)幫助我們測(cè)量View。MeasureSpec是一個(gè)32位的int值,其中高2位為測(cè)量的模式,低30位為測(cè)量的大小,在計(jì)算中使用位運(yùn)算的原因是為了提高并優(yōu)化效率。


測(cè)量的模式可以為以下三種。

EXACTLY

即精確值模式,當(dāng)我們將控件的layout_width屬性或layout_height屬性指定為具體數(shù)值

AT_MOST

即最大值模式,當(dāng)控件的layout_width屬性或layout_height屬性指定為wrap_content時(shí),


UNSPECIFIED

這個(gè)屬性比較奇怪——它不指定其大小測(cè)量模式,View想多大就多大,通常情況下在繪制自定義View時(shí)才會(huì)使用。

View類(lèi)默認(rèn)的onMeasure()方法只支持EXACTLY模式,所以如果在自定義控件的時(shí)候不重寫(xiě)onMeasure()方法的話(huà),就只能使用EXACTLY模式??丶梢皂憫?yīng)你指定的具體寬高值或者是match_parent屬性。而如果要讓自定義View支持wrap_content屬性,那么就必須重寫(xiě)onMeasure()方法來(lái)指定wrap_content時(shí)的大小。

ViewGroup會(huì)去管理其子View,其中一個(gè)管理項(xiàng)目就是負(fù)責(zé)子View的顯示大小。當(dāng)ViewGroup的大小為wrap_content時(shí),ViewGroup就需要對(duì)子View進(jìn)行遍歷,以便獲得所有子View的大小,從而來(lái)決定自己的大小。


在自定義ViewGroup時(shí),通常會(huì)去重寫(xiě)onLayout()方法來(lái)控制其子View顯示位置的邏輯。同樣,如果需要支持wrap_content屬性,那么它還必須重寫(xiě)onMeasure()方法,這點(diǎn)與View是相同的。

ViewGroup會(huì)使用dispatchDraw()方法來(lái)繪制其子View,其過(guò)程同樣是通過(guò)遍歷所有子View,并調(diào)用子View的繪制方法來(lái)完成繪制工作。

在View中通常有以下一些比較重要的回調(diào)方法。

onFinishInflate():從XML加載組件后回調(diào)。

onSizeChanged():組件大小改變時(shí)回調(diào)。

onMeasure():回調(diào)該方法來(lái)進(jìn)行測(cè)量。

onLayout():回調(diào)該方法來(lái)確定顯示的位置。

onTouchEvent():監(jiān)聽(tīng)到觸摸事件時(shí)回調(diào)。

通常情況下,有以下三種方法來(lái)實(shí)現(xiàn)自定義的控件。

對(duì)現(xiàn)有控件進(jìn)行拓展

通過(guò)組合來(lái)實(shí)現(xiàn)新的控件

重寫(xiě)View來(lái)實(shí)現(xiàn)全新的控件

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容