代码片段如图,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 자동 추가"에 대한 설명을 찾을 수 없었습니다. 이 동작의 원리에 대해 전문가에게 조언을 구하고 싶습니다. >
의 RelativeLayout
에 maxHeight가 추가되었습니다.measureChild
伊谢尔伦2017-04-17 17:51:30
@assistne에서 영감을 얻어 RelativeLayout의 소스코드를 확인했습니다
getChildMeasureSpec 메소드에서 다음 코드를 발견했습니다
getChildMeasureSpec() 메서드는 결국 MeasureChild() 및 MeasureChildHorizontal()을 통해 onMeasure()에 의해 간접적으로 호출됩니다.
일부 특별한 경우를 제외하고 일반적으로 RelativeLayout의 하위 컨트롤이 WRAP_CONTENT로 설정된 경우 레이아웃 중 최대 크기 제한이 있습니다.