DEVLOG 9.10(二) 關(guān)于自定義View的一些問題總結(jié):
問題記錄:
View支持wrap_content:?
自定義View如果繼承View時,如果不去實現(xiàn)onMeasure處理wrap_content,則當(dāng)這個View設(shè)置了wrap_content時,View的長度和父容器中可用長度相同,而且測量模式為AT_MOST。推導(dǎo)
View#onMeasure會調(diào)用View#getDefaultSize,里面會指定View的specSize 為傳過來的MeasureSpec。
這個MeasureSpec由ViewGroup決定。通過ViewGroup#getChildMeasureSpec可以推導(dǎo)出一張表,可以得出結(jié)論。


1.1 . 怎么處理?
思路:在onMeasure中獲取Image(假設(shè)想wrap_content bitmap)的寬高,然后檢查width和height的LayoutParams屬性,如果是wrap_content,設(shè)置為從bitmap中拿到的大?。环駝t設(shè)置為傳入的測量的大小。
可以參考Android開發(fā)藝術(shù)探索+這篇博客
https://blog.csdn.net/carson_ho/article/details/62037760
2. 完成你的View的時候?qū)崿F(xiàn)padding
padding表示【填料】和margin不同,通俗的理解上margin是外邊距,padding是內(nèi)邊距。繼承自View和ViewGroup的自定義空間肯定沒有實現(xiàn)padding的處理。畢竟實現(xiàn)MeasureSpec的時候計算了LayoutParams,里面就有Margin計算。這個實現(xiàn)也不難,View#getPaddingxxxx獲取padding,減小width和height就行【因為內(nèi)部被填充了,大小減小了】。
今天就這樣~