BasePopup的一大特点是取代了原有不合理且混乱的measure/layout,用内部的DecorViewProxy完全包裹住系统的DecorView以取代其measure和layout,做到各个版本一致且拓展了更多的功能。

在BasePopup中,我们可以按照我们日常的习惯使用wrap_content和match_parent,而不用特意去设置,在xml直接书写即可,所见即所得。

在收到的反馈中(issue#236),我们发现了部分用户希望ContentView在match_parent下能够填满剩余空间,而不是填满屏幕。在2.2.2版本更新后,我们支持了这一特性,在本篇文档中将会详述这个特性。

宽度match_parent

  • 如果不指定AnchorView,则ContentView的宽度即为宿主Window宽度。
  • 如果跟AnchorView关联,则ContentView的宽度跟随Gravity关联。
    • 比如Gravity.Left,意味着BasePopup显示在AnchorView的左边,此时宽度填充AnchorView左边剩余宽度。

match_parent.gif

高度match_parent

  • 如果不指定AnchorView,则ContentView的宽度即为宿主Window高度。
  • 如果跟AnchorView关联,则ContentView的宽度跟随Gravity关联。
    • 比如Gravity.Bottom,意味着BasePopup显示在AnchorView的下方,此时宽度填充AnchorView下方剩余高度。

match_parent_h.gif