찾다

 >  Q&A  >  본문

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

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

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

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

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

怪我咯怪我咯2772일 전624

모든 응답(2)나는 대답할 것이다

  • 高洛峰

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

    컨트롤 높이 좀 보세요onMeasure

    ScrollView을 직접 상속하고 onMeasure 메서드를 재정의하고 다음과 같이 전달된 매개변수를 인쇄합니다.

    으아악

    로그 인쇄

    으아악

    모드가 AT_MOST인 것을 알 수 있는데, 이는 높이가 제한된다는 의미입니다

    RelativeLayout과 ScrollView의 코드를 살펴본 결과 "maxHeight 자동 추가"에 대한 설명을 찾을 수 없었습니다. 이 동작의 원리에 대해 전문가에게 조언을 구하고 싶습니다. >

    그래서

    RelativeLayout 에 maxHeight가 추가되었습니다.measureChild

    회신하다
    0
  • 伊谢尔伦

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

    @assistne에서 영감을 얻어 RelativeLayout의 소스코드를 확인했습니다
    getChildMeasureSpec 메소드에서 다음 코드를 발견했습니다

    으아악

    getChildMeasureSpec() 메서드는 결국 MeasureChild() 및 MeasureChildHorizontal()을 통해 onMeasure()에 의해 간접적으로 호출됩니다.

    일부 특별한 경우를 제외하고 일반적으로 RelativeLayout의 하위 컨트롤이 WRAP_CONTENT로 설정된 경우 레이아웃 중 최대 크기 제한이 있습니다.

    회신하다
    0
  • 취소회신하다