這位小夥伴的暱稱是:面試
陳小緣app
若是你們平時打開公衆號比較多,那麼必定知道這個系列:ide
這交互炸了系列 第十三式之移花接木學習
這交互炸了系列 第十二式之年年有魚gradle
....網站
看名字就知道至少有十三篇啦,能夠自行去做者博客學習。this
每一篇質量都很是高。blog
不過感謝主要的緣由不是這個。圖片
追溯問答get
還記得在 5 月底的時候,玩 Android 上線了問答:
千呼萬喚始出來 玩Android 上線了問答
我大概發佈了 10 多個問題:
其實發布問題是一個很無聊的事情,有時候發佈幾天了,還沒人回答,慢慢就會造成一股很是消極的情緒,對該功能甚至自個人否認:
這功能有個雞兒用,哪能造成沉澱呢...
印象最深的一次,我發佈了一個 Binder 的問題,掛了好幾天沒人回答,我就開始自暴自棄了(仔細看上圖 ,binder 接下一個問題,週期接近半個月),還好他,沒錯,就是這個男人,羣裏 at 了我一下,問我問答呢?
把我從放棄邊緣拉回來了。
因此在這夜深人靜的時刻,我數了一下全部的問題,陳小緣啦啦啦同窗幾乎回答了我全部的問題。
我數了一下,只有一個問題,gradle plugin 相關的沒有回答,其餘都作了解答。
說實話,沒有小緣的回答,這個功能我就準備石沉大海了。
在此表示由衷的感謝。
問答的初衷
其實我最初作問答這個功能,主要是針對學習性質的問題,什麼意思呢?
就是問答的含義其實是給你們查缺補漏,或者是之前沒有了解過的內容,恰好學習一下,最後回來回答總結一下。
往大一點說,整個網站都是偏學習性質的,就是它只能做爲你想要學習的時候,來看看文章。
今天的乾貨
聽我扯了這麼多,要是不加點乾貨,感受浪費一次推送,好虧。
那麼今天就主要貼個問答吧。
詳細的描述下自定義 View 測量時 MesureSpec.UNSPECIFIED
相信你們多數都能說出自定義的步驟,可是不少細節上的問題其實也須要關注。
針對MesureSpec.UNSPECIFIED
這個模式何時會遇到?
遇到後怎麼處理?
這個問題,我基本上面試都會問,可以回答上來的同窗其實不多。
UNSPECIFIED,就是未指定的意思,在這個模式下父控件不會干涉子View想要多大的尺寸。
那麼,這個模式何時會在onMeasure裏遇到呢:
實際上是取決於它的父容器。
就拿最經常使用的RecyclerView作例子,在item進行measure時,若是列表可滾動,而且item的寬或高設置了WRAP_CONTENT的話,那麼接下來,itemView的onMeasure方法就會收到MesureSpec.UNSPECIFIED。
打開RecyclerView源碼,會在getChildMeasureSpec方法裏看到這麼一句註釋:
「MATCH_PARENT can't be applied since we can scroll in this dimension, wrap instead using UNSPECIFIED.」
它想表達的是:在可滾動的ViewGroup中,不該該限制Item的尺寸(若是是水平滾動,就不限制寬度),爲何呢?
由於是能夠滾動的,就算Item有多寬,有多高,經過滾動也同樣能看到滾動前被遮擋的部分。
有同窗可能會有疑問:
我設置了wrap_content,在onMeasure中應該收到的是AT_MOST纔對啊,爲何要強制變成UNSPECIFIED?
這是由於考慮到Item的尺寸有可能超出這個可滾動的ViewGroup的尺寸,而在AT_MOST模式下,你的尺寸不能超出你所在的ViewGroup的尺寸,最多隻能等於。因此用UNSPECIFIED會更合適,這個模式下你想要多大就多大。
那麼,咱們在自定義View的時候,在測量時發現是UNSPECIFIED模式時,應該怎麼作呢:
這個就比較自由了,既然尺寸由本身決定,那麼我能夠寫死爲50,也能夠固定爲200。
但仍是建議結合實際需求來定義咯。
好比ImageView,它的作法就是:有設置圖片內容(drawable)的話,會直接使用這個drawable的尺寸,但不會超過指定的MaxWidth或MaxHeight, 沒有內容的話就是0。
而TextView處理UNSPECIFIED的方式,和AT_MOST是同樣的。
固然了,這些尺寸都不必定等於最後layout出來的尺寸,由於最後決定子View位置和大小的,是在onLayout方法中,在這裏你徹底能夠無視這些尺寸,去layout成本身想要的樣子。
不過,通常不會這麼作。
來自:小緣的回答。
意外的發現
有一位公衆號主 nanchen,受到我以前作的:
我在一個羣分享Android 好像被我分享得沒人說話了... 3期
算是啓發吧。每日一問這個事情,說實話看起來很是容易,堅持下來難到不行。
也在陸續更新一些每日一問的內容,不知道能堅持多久,但仍是爲他點贊,文章大概以下:
每日一問:講講 Java 虛擬機的類加載機制
最後
還記得第一次和小緣聊天的時候,他還在糾結怎麼追女神,最近發現他已經在給女友買書了!
應該是好人有好報吧。
嘿嘿嘿~
那個,小緣不要有壓力,千萬不要由於這篇文章,心態不要產生任何變化,把回答做爲任務,其實仍是就想回答就回答,該作菜作菜,輕鬆過好本身的每一天!
推薦閱讀:
教你寫一個彈幕庫,肯定不瞭解一下?
Android 優質技術分享 | 6 期
19年3月移動端大廠面試題分享