无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

UI不好,工作難保!自定義View是Android程序員的分水嶺?安卓開發(fā)升職加

2022-05-18 10:08 作者:房頂上的鋁皮水塔  | 我要投稿

ViewGroup的【生命周期流程】:



Q:為什么有些方法會被調(diào)用多次?

A:我個人理解因為對于一個ViewGroup進行measure的時候,一個View的大小依賴于measure子View和父View的measureSpec,所以一個View的onLayout onMeasure方法會被調(diào)用多次。

課程1自定義FlowLayout:

自定義FlowLayout其實就是自定義一個ViewGroup,我們關(guān)注的點主要在onMeasure和onLayout:



onMeasure部分

  1. 測量的關(guān)系,ViewGroup在進行measure時,需根據(jù)子View的大小調(diào)整自身。
  2. 在ViewGroup中onMeasure時,不能直接將從上面?zhèn)飨碌膍easureSpec傳給子View。
  3. onMeasure的過程:
  4. 度量孩子 -> for 孩子的height width,通過getChildMeasureSpec方法設(shè)置正確的measurespec,然后重新measure
  5. 度量自己 -> setMeasureDimension(),和自身的功能相關(guān),并且最后需要根據(jù)MeasureSpec調(diào)整

onLayout部分

坐標系

onLayout的四個參數(shù),都是參考ViewGroup(圖二)


4. 在后續(xù)的layout measure過程中可能會改變的變量需要注意避免在構(gòu)造函數(shù)中初始化,因為構(gòu)造函數(shù)只會調(diào)用一次,measure layout會調(diào)用多次。

5 . measure過程還是需要注意使用getChildMeasureSpec,同時注意view inflate的問題:

LayoutInflater.inflate(res, parent, false),如果不是這樣會導(dǎo)致,根View(temp)無法執(zhí)行setLayoutParams,這樣child.getLayoutParams也會出問題。


面試問題總結(jié):

Q1:MeasureSpec和LayoutParams之間有關(guān)聯(lián)嗎?為什么有了LayoutParams還需要MeasureSpec?

View在xml中通過使用android:layout_width等方式告訴父容器布局方式(其實是LayoutParams的xml屬性),LayoutParams+父布局決定了MeasureSpec。

Q2:如何將xml中的定義轉(zhuǎn)變成MeasureSpec?

使用getChildMeasureSpec,getChildMeasureSpec在任主席的《安卓開發(fā)藝術(shù)探索》中有總結(jié)。其中第二個參數(shù)padding來自parent ,第一個參數(shù)是父親的MeasureSpec,最后一個是子需要的大小。



Q3:為什么需要measure

























UI不好,工作難保!自定義View是Android程序員的分水嶺?安卓開發(fā)升職加的評論 (共 條)

分享到微博請遵守國家法律
鄯善县| 张掖市| 哈尔滨市| 灯塔市| 湄潭县| 贵南县| 乐昌市| 丰顺县| 外汇| 盐池县| 金门县| 保康县| 怀宁县| 虎林市| 凯里市| 临高县| 伊春市| 舒兰市| 定南县| 库伦旗| 巧家县| 陕西省| 湾仔区| 南丹县| 凤山县| 十堰市| 聂拉木县| 水城县| 靖江市| 岫岩| 梅州市| 东城区| 富民县| 佳木斯市| 娄底市| 连平县| 宾川县| 鹤庆县| 石棉县| 井冈山市| 凭祥市|