android - 怎么解释安卓下这种布局?
怪我咯
怪我咯 2017-04-17 17:49:30
0
2
620

代码片段如图,RelativeLayout定了一个固定的高度。

当LinearLayout内容较少时,Srollview维持wrapcontent的表现并在RelativeLayout中垂直居中。

当LinearLayout内容比较多、高度增大到大于RelativeLayout的高度时,ScrollView的高度不会继续变大,而是维持跟Relativelayout一样高并开始可以滚动。

看了一下RelativeLayout和ScrollView的代码都没发现这种“自动加maxHeight”的解释,求高手指点一下这种表现的原理是什么

怪我咯
怪我咯

走同样的路,发现不同的人生

全員に返信(2)
小葫芦

コントロールの高さを見てくださいonMeasure

ScrollView を直接継承して onMeasure メソッドをオーバーライドし、次のように渡されたパラメーターを出力します

リーリー

ログの印刷

リーリー

モードが AT_MOST であることがわかります。これは、高さが制限されていることを意味します

RelativeLayout と ScrollView のコードを調べたところ、「maxHeight を自動的に追加する」という説明が見つかりませんでした。この動作の原理について専門家にアドバイスを求めたいと思います。

したがって、maxHeight は RelativeLayout measureChild に追加されます。

いいねを押す +0
伊谢尔伦

@assistne に触発されて、RelativeLayout のソース コードを確認しました
getChildMeasureSpec メソッドに次のコードを見つけました

リーリー

getChildMeasureSpec() メソッドは、最終的に onMeasure() によって、measureChild() およびMeasureChildhorizo​​ntal() を介して間接的に呼び出されます。

一部の特殊な場合を除いて、一般に、RelativeLayout のサブコントロールが WRAP_CONTENT に設定されている場合、レイアウト中に最大サイズ制限があります。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート