2013년 7월 16일 화요일

layout 조정 완료 event

도움: http://stackoverflow.com/questions/8418868/how-to-know-when-an-activity-finishes-a-layout-pass

layout 조정이 완료된 시점을 알아야 하는 경우가 있다.

가변적인 부모 view 의 크기를 이용해서 자식 view 의 크기를 결정해야 하는 경우가 있었다.

ViewTreeObserver 에 OnGlobalLayoutListener 를 추가해 줌으로써 해결 할 수 있었다.
View view = findViewById(R.id.view);
view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
 @Override
 public void onGlobalLayout() {
  
  // layout 이 완료되고 모든 view 들의 크기가 정해진 상태
 }
});

한가지 주의할 점은 이벤트가 불렸을 때 어떠한 view 의 layout 을 변경한다면 무한대로 해당 이벤트가 불리기 때문에 layout 을 변경해야 하는 시점에만 layout 을 변경하도록 처리해야 한다.

예를 들어 해당 이벤트 발생시 어떠한 view 의 크기를 변경해야 한다면 이미 크기 변경이 이루어진 경우에는 처리하지 않도록 하는 방법이 있겠다.

댓글 없음:

댓글 쓰기