렌더링하기 전에 뷰 측정
뷰를 부모에 연결 한 후 뷰가 얼마나 커질 지 알아야합니다.
이 방법을 재정의했습니다.
onMeasure(int, int);
하지만이 메서드는 실제로 다음을 사용하여 컨테이너에 사용자 정의 뷰를 추가 할 때만 호출되는 것처럼 보입니다.
addView(myView);
뷰 자체를 렌더링하기 전에이 정보를 얻을 수있는 방법이 있다고 생각하십니까? 기본적으로 첨부하기 전에 실제 크기를 알아야하며 일정 공간이 더 많이 필요하면 뷰를 전혀 첨부하지 않습니다.
아무도?
당신이 얻고 싶은 경우에 활동하기 전에 폭과 높이를 측정, 그 뷰 계층에 추가하고 전화를해야합니다 그것을 밖으로 누워있다 measure()
온 View
호출하기 전에 자신 getMeasuredWidth()
또는 getMeasuredHeight()
.
측정 된 너비와 높이는 measure가 호출 된 후에 설정되므로 (이는를 호출 함 onMeasure()
)이 지점 이전에 0을 반환합니다. 귀하 의 필요에 따라 MeasureSpec
s 를 제공 measure(..)
해야합니다.
자식이 스스로 제약을 부과 할 수있게 해주는 MeasureSpecs는 다음과 같습니다.
int widthMeasureSpec = MeasureSpec.makeMeasureSpec(*some width*, MeasureSpec.EXACTLY);
int heightMeasureSpec = MeasureSpec.makeMeasureSpec(*some height*, MeasureSpec.EXACTLY);
중요한 점 . (새 API에서 변경됨)
위에서 전달 된 너비는 명시 적 px 또는
ViewGroup.LayoutParams.WRAP_CONTENT
또는
ViewGroup.LayoutParams.FILL_PARENT.
또한 뷰가 실제 대상 계층에서 측정 될 때 전달 될 MeasureSpec이 포함 된 레이아웃 논리를 기반으로measure()
구성 된다는 점도 주목할 가치 가 있습니다 . 이 부모 viewGroup / 자체 레이아웃 제약 / 형제 자식 뷰의 제약 조건에서 고려할 때 첫 번째 측정 값이 유효하지 않으면 두 번 이상 호출 될 수 있습니다. 측정 된 크기에 따라 로직을 구현하기 전에 호출을 기다리지 않으면 최종 결과를 얻기가 어려울 것입니다 (상황에 따라 다름).ViewGroups
viewGroup
measure()
measuredWidth & height
위의 솔루션에서, 그러나 모든 경우에 위의 기술을 사용하여 목적에 맞았지만 비교적 간단했습니다. 실제로 컨텍스트에서 측정해야하는 경우를 onLayout()
반환 한 후에 수행하고 변경 사항을 명시 적으로 requestLayout()
다시 설정해야 합니다.
OnMeasure는 View의 크기를 알려주지 않습니다. 대신, 상위 뷰에 의해 적용되는 몇 가지 제약을 제공하여 사용자 정의 뷰에 크기를 설정하도록 요청합니다.
이것은 SDK 문서에서 가져온 것입니다.
첫 번째 쌍은 측정 된 너비와 측정 된 높이로 알려져 있습니다. 이러한 차원은 뷰가 부모 내에서 원하는 크기를 정의합니다 (자세한 내용은 레이아웃 참조). 측정 된 차원은 getMeasuredWidth () 및 getMeasuredHeight ()를 호출하여 얻을 수 있습니다.
두 번째 쌍은 단순히 너비와 높이 또는 때로는 그리기 너비와 그리기 높이로 알려져 있습니다. 이러한 치수는 화면에서, 그리기 시간 및 레이아웃 이후에보기의 실제 크기를 정의합니다. 이러한 값은 측정 된 너비 및 높이와 다를 수 있지만 반드시 그럴 필요는 없습니다. 너비와 높이는 getWidth () 및 getHeight ()를 호출하여 얻을 수 있습니다.
레이아웃 후 getWidth () 및 getHeight ()를 호출하여 사용자 정의보기의 최종 크기를 찾을 수 있습니다.
첫 번째 전화
view.measure(0, 0);
그런 다음
view.getMeasuredWidth()
또는 view.getMeasuredHeight()
getMesauredWith () 및 getMeasuredHeight ()를 사용할 수 있어야합니다.
http://developer.android.com/reference/android/view/View.html#getMeasuredWidth%28%29
나는 같은 문제가 있습니다. 유일한 방법은 먼저 렌더링 한 다음 크기 조건을 충족하면 제거하는 것 입니다. 약간 이상하게 보이지만 Android는 그림을 그린 후에 만 치수를 아는 것 같습니다.
참조 URL : https://stackoverflow.com/questions/2827079/measuring-a-view-before-rendering-it
'IT story' 카테고리의 다른 글
Model View Presenter 란 무엇입니까? (0) | 2020.12.30 |
---|---|
Django : 기본 키를 지정하지 않고 조명기를 만드시겠습니까? (0) | 2020.12.30 |
MSDeploy (Visual Studio)를 App_Data 폴더를 삭제하지 않고 나머지는 모두 삭제합니다. (0) | 2020.12.30 |
Java 클래스가 런타임에 자신에게 메소드를 추가 할 수 있습니까? (0) | 2020.12.30 |
std :: string :: c_str () 및 임시 (0) | 2020.12.30 |