activity에서는 onWindowFocusChanged를 사용하여 생성되었던 textview에 대한 사이즈를 구해서 재조정하는 resize함수를 사용했었는데 이걸 fragment에서는 어떻게 구현할까 하는 문제에 부딪쳐 인터넷 검색하여 얻어낸 소스를 공개할까합니다.
Activity 소스
⁄* * (non-Javadoc) * @see android.app.Activity#onWindowFocusChanged(boolean) * 다 그려지기 전에는 textview의 높이와 길이를 불러올 수 없어 * 다 그리고 불러지는 함수인 onWindowFocusChanged로 * resize함 *⁄ public void onWindowFocusChanged(boolean hasFocus) { if(datainfo !=null){ if(datainfo.length !=0) resizeRow(datainfo.length); } }
Fragment 소스
public void onResume() { super.onResume(); //mStatus.setText("현재 상태 : 서비스 시작"); cellwidth = new int[5]; desity = this.getResources().getDisplayMetrics().density; appendHeader(); appendRowBlank(); datainfo = selectData(); appendRow(datainfo); ViewTreeObserver vto = headerView[0].getViewTreeObserver(); vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @SuppressWarnings("deprecation") @Override public void onGlobalLayout() { //Log.d(TAG, "Height = " + headerView[0].getWidth() + " Width = " + tv[0][0].getWidth()); ViewTreeObserver obs = headerView[0].getViewTreeObserver(); resizeRow(); obs.removeGlobalOnLayoutListener(this); } }); }
위와같이 ViewTreeObserver 인스턴스를 하나 만들어서 뷰의 계층의 글로벌 변경에 대한 리스너를 등록한다.
ViewTreeObserver.OnGlobalLayoutListener
Interface definition for a callback to be invoked when the global layout state or the visibility of views within the view tree changes.
어떤 뷰의 레이아웃이나 가시성이 변경되는 것을 알 수 있다.
이 리스너를 등록하여 다시 resize하도록 한다.
전체소스
'프로그래밍 > 안드로이드' 카테고리의 다른 글
AsyncTask vs Thread로의 Progressbar구현 비교 (0) | 2013.04.13 |
---|---|
[안드로이드]AsyncTask에 대하여...(전체소스포함) (0) | 2013.04.13 |
[안드로이드]프로그먼트(fragment) (0) | 2013.04.11 |
[안드로이드]액션바에 tab과 swipe기능 넣기-소스포함- (0) | 2013.04.10 |
[안드로이드]액션바에 search view 추가하기 -전체소스포함- (0) | 2013.04.10 |