2016-08-05 2 views
2

런타임에 화면에 컨트롤을 레이아웃하는 앱이 있는데, 너비가 WRAP_CONTENT 인 뷰에서 measure을 호출하는 각 컨트롤을 통과합니다.측정치 캐시를 지우는 방법

스텐실 버전의 뷰를 표시하기 위해 뷰에 데이터를 설정하기 전에이 작업을 수행 한 다음 뷰에 실제 데이터를 설정 한 후에이 작업을 수행합니다.

동일한 입력으로 측정 값을 두 번 호출하므로 측정 값 캐시에 두 번째로 도달하고 컨트롤의 데이터가 변경된 이후에 뷰의 실제 측정 값이 변경되었지만 측정하지 못하는 것이 문제입니다 .

두 번째 호출에서 강제로 다시 측정 할 수있는 방법이 있습니까?

+0

나는에 의해이 문제를 해결 일한 onMeasure를 호출하는 measureActually 메소드로 서브 클래스를 생성한다 (onMeasure가 보호되어 있기 때문에 필요하다). 분명히 캐시를 지우는 것을 선호합니다. - / –

답변

0

내가 캐시를 삭제하는 방법을 발견하지 않은,하지만 값 중 하나가 지정되어 있지 않은 경우, 그것은 캐시 불일치 모양이 비슷한 강제 할 수 있습니다

int fakeSpace = (int) (Math.random() * 9999999); 
int spec = View.MeasureSpec.makeMeasureSpec(fakeSpace, View.MeasureSpec.UNSPECIFIED); 
view.measure(spec, spec); 
관련 문제