検索

ホームページ  >  に質問  >  本文

android - 怎么解释安卓下这种布局?

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

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

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

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

怪我咯怪我咯2772日前623

全員に返信(2)返信します

  • 高洛峰

    高洛峰2017-04-17 17:51:30

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

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

    リーリー

    ログの印刷

    リーリー

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

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

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

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 17:51:30

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

    リーリー

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

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

    返事
    0
  • キャンセル返事