2010-11-23 10 views
11

LinearLayout에 일련의 사용자 지정보기를 추가하고 있습니다. 특정 매개 변수를 기반으로 차원을 반환하려면 이러한 사용자 지정 뷰의 onMeasure 메서드를 재정의했습니다. 사용자 입력을 기반으로보기의 크기를 변경하려면 이러한 매개 변수를 변경하고 싶습니다. LinearLayout이 자식을 "다시 레이아웃"하여 새 치수를 반영하도록하려면 어떻게해야합니까?Android에서보기를 다시 레이아웃하는 방법은 무엇입니까?

답변

22

Oh ... linearLayout.requestLayout().

+0

이 또한 무효를 확인 (뷰의 자신의 폭과 높이를 변경할 필요가 없습니다 주어진)() – Thomas

+0

invalidate()는 유용하지 않았다. 왜냐하면 레이아웃을 무효화하면 모든 자식이 다시 그려지지만 실제로는 자식의 크기를 조정하거나 다시 레이아웃하지 않기 때문이다. – ab11

+0

Android OS 4.x 태블릿 (ICS)에서 중도 재 지정이 도움이되지 않았습니다. 무엇이 도움이되었고,'getWindow(). requestFeature (Window.FEATURE_NO_TITLE); '을 제거하고 있었습니까? –

5

제 사례는 모든 아이들을 즉시 다시 연결해야합니다. requestLayout()이 즉시 수행하지 않습니다. 저와 같은 요구 사항이있는 사람들을 위해

:

이 바로 뷰의 아이 재 레이아웃 강제를

private void reLayoutChildren(View view) { 
    view.measure(
     View.MeasureSpec.makeMeasureSpec(view.getMeasuredWidth(), View.MeasureSpec.EXACTLY), 
     View.MeasureSpec.makeMeasureSpec(view.getMeasuredHeight(), View.MeasureSpec.EXACTLY)); 
    view.layout(view.getLeft(), view.getTop(), view.getRight(), view.getBottom()); 
} 
+0

이것은 나를 위해 일한 유일한 해결책입니다. 'invalidate'와'requestLayout'은 그냥하지 않을 것입니다. 그래서이 팁을 주셔서 감사합니다! –

관련 문제