代码片段如图,RelativeLayout定了一个固定的高度。
当LinearLayout内容较少时,Srollview维持wrapcontent的表现并在RelativeLayout中垂直居中。
当LinearLayout内容比较多、高度增大到大于RelativeLayout的高度时,ScrollView的高度不会继续变大,而是维持跟Relativelayout一样高并开始可以滚动。
看了一下RelativeLayout和ScrollView的代码都没发现这种“自动加maxHeight”的解释,求高手指点一下这种表现的原理是什么
控制項的高度問題看
onMeasure
onMeasure
直接自己继承
ScrollView
重写onMeasure
方法, 打印传进来的参数如下日志打印
就可以知道模式是
AT_MOST
, 也就说高度有限制所以maxHeight是在
直接自己繼承RelativeLayout
的measureChild
ScrollView
重寫onMeasure
方法, 印出來的參數如下#🎜🎜# rrreee #🎜🎜#日誌列印#🎜🎜# rrreee #🎜🎜#就可以知道模式是AT_MOST
, 也就說高度有限制#🎜🎜# #🎜🎜#所以maxHeight是在RelativeLayout
的measureChild
中加進去的.#🎜🎜#受 @assistne 啟發,去查了下RelativeLayout的源碼
在 getChildMeasureSpec方法中發現瞭如下代碼
而getChildMeasureSpec()方法最終被onMeasure()透過measureChild()和measureChildHorizontal()間接呼叫。
排除一些特殊情況,一般情況下,RelativeLayout的子控件,如果設定為WRAP_CONTENT,則在佈局時會有最大尺寸限制。