代码片段如图,RelativeLayout定了一个固定的高度。
当LinearLayout内容较少时,Srollview维持wrapcontent的表现并在RelativeLayout中垂直居中。
当LinearLayout内容比较多、高度增大到大于RelativeLayout的高度时,ScrollView的高度不会继续变大,而是维持跟Relativelayout一样高并开始可以滚动。
看了一下RelativeLayout和ScrollView的代码都没发现这种“自动加maxHeight”的解释,求高手指点一下这种表现的原理是什么
高洛峰2017-04-17 17:51:30
コントロールの高さを見てくださいonMeasure
ScrollView
を直接継承して onMeasure
メソッドをオーバーライドし、次のように渡されたパラメーターを出力します
ログの印刷
リーリーモードが AT_MOST
であることがわかります。これは、高さが制限されていることを意味します
RelativeLayout と ScrollView のコードを調べたところ、「maxHeight を自動的に追加する」という説明が見つかりませんでした。この動作の原理について専門家にアドバイスを求めたいと思います。
したがって、maxHeight は RelativeLayout
の measureChild
に追加されます。
伊谢尔伦2017-04-17 17:51:30
@assistne に触発されて、RelativeLayout のソース コードを確認しました
getChildMeasureSpec メソッドに次のコードを見つけました
getChildMeasureSpec() メソッドは、最終的に onMeasure() によって、measureChild() およびMeasureChildhorizontal() を介して間接的に呼び出されます。
一部の特殊な場合を除いて、一般に、RelativeLayout のサブコントロールが WRAP_CONTENT に設定されている場合、レイアウト中に最大サイズ制限があります。