HenCoder UI 部分 2 1 布局基礎

2021-09-11 09:08:11 字數 2062 閱讀 3090

hencoder 的第二季:自定義 view 第二部分——布局過程的自定義,從這期正式開始了。好像有點小激動。

廢話少說,直入正題。

會者不難這個詞在很多地方都講得通,但在布局過程的自定義上,尤為適用。

有人說:什麼?簡介完了就是總結了?

布局過程,就是程式在執行時利用布局檔案的**來計算出實際尺寸的過程。

兩個階段:測量階段和布局階段。

測量階段:從上到下遞迴地呼叫每個 view 或者 viewgroup 的 measure() 方法,測量他們的尺寸並計算它們的位置;

布局階段:從上到下遞迴地呼叫每個 view 或者 viewgroup 的 layout() 方法,把測得的它們的尺寸和位置賦值給它們。

測量階段,measure()方法被父 view 呼叫,在measure()中做一些準備和優化工作後,呼叫onmeasure()來進行實際的自我測量。onmeasure()做的事,viewviewgroup不一樣:

viewviewonmeasure()中會計算出自己的尺寸然後儲存;

viewgroupviewgrouponmeasure()中會呼叫所有子 view 的measure()讓它們進行自我測量,並根據子 view 計算出的期望尺寸來計算出它們的實際尺寸和位置(實際上 99.99% 的父 view 都會使用子 view 給出的期望尺寸來作為實際尺寸,原因在下期或下下期會講到)然後儲存。同時,它也會根據子 view 的尺寸和位置來計算出自己的尺寸然後儲存;

布局階段,layout()方法被父 view 呼叫,在layout()中它會儲存父 view 傳進來的自己的位置和尺寸,並且呼叫onlayout()來進行實際的內部布局。onlayout()做的事,viewviewgroup也不一樣:

view:由於沒有子 view,所以viewonlayout()什麼也不做。

viewgroupviewgrouponlayout()中會呼叫自己的所有子 view 的layout()方法,把它們的尺寸和位置傳給它們,讓它們完成自我的內部布局。

三類:重寫onmeasure()來修改已有的view的尺寸;

重寫onmeasure()來全新定製自定義view的尺寸;

重寫onmeasure()onlayout()來全新定製自定義viewgroup的內部布局。

也就是重寫onmeasure()來修改已有的view的尺寸的具體做法:

重寫onmeasure()方法,並在裡面呼叫super.onmeasure(),觸發原有的自我測量;

super.onmeasure()的下面用getmeasuredwidth()getmeasuredheight()來獲取到之前的測量結果,並使用自己的演算法,根據測量結果計算出新的結果;

呼叫setmeasureddimension()來儲存新的結果。

為了避免轉頭就忘,強烈建議你趁熱打鐵,做一下這個練習專案:hencoderpracticelayout1

下期是布局部分的最後一期:全新自定義 view 的尺寸。

那就關注一下?↓↓↓

21 綜合應用石頭剪刀布

迴圈 即重複,當某些語句要出現執行多次時,就會把這 些語句放到迴圈的大括號內。迴圈體 是迴圈大括號內的所有語句的集合。迴圈的次數,往往會定義乙個整型變數來控制,叫迴圈變數。迴圈變數的三個必要表示式 1.初值,是賦值語句,如 x 1 2.終限,是關係或關係加邏輯表示式,如 x 100 3.步長,是乙個...

Git 2 1發布 新特性預覽

在git 2.0發布兩個半月之後,git又發布了新的版本2.1版。雖然只是小版本號的更新,但是這一版的新特性和改進的內容的列表卻很長。可以從git倉庫找到完整的發布日誌,該日誌提供了關於git 2.1版更多的細節。下面我們挑選了一些git 2.1版的新特性來進行一下簡單的介紹。新版的git同樣也包含...

Angular 中間部分 2 1 內建指令和表單

基於條件,用於顯示或隱藏乙個元素,true顯示,false隱藏 div never shows div str yes shows根據返回值,切換不同元素 class container ngswitch myvar var is adiv var is bdiv var is something ...