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하도록 한다.

전체소스

 

PublicWifi_0409.zip

 

+ Recent posts