2012년 5월 19일

안드로이드 inflate LayoutInflater 에 관한 고찰


inflate 라는 단어는 본래 : 부풀리다 라는 뜻을 가진 단어 입니다.
안드로이드에서 "전개"라는 의미로 이해하면 될듯합니다.

INFLATION 의 기능은 
1. XML 문서에 정의된 레이아웃과 차일드 뷰의 속성을 읽어 실제 뷰 객체를 생성해 내는 동작.
2. 레이아웃의 정보대로 객체를 생성하고 속성 변경 메서드를 순서대로 호출 하는것.
이라고 나와있습니다.

Avtivity 화면에서 사용자 인터페이스를 정의한 XML 을 VIEW 해줘야 되는데,
이때 inflate 라는 메소드를 통해서 이러한 XML 리소스의 정보를 해석하여 뷰를 생성하고 루트뷰를 리턴합니다.

리턴된 루트뷰를 setContentView() 라는 메소드를 통해 보여줄 수 가 있습니다.
즉, 핵심은 XML문서를 통채로 사용할 수 없으니까, 컴파일된 리소스를 넘겨줘야 된다는 뜻으로 정리하면 될듯합니다.
그리고,
LayoutInflater 클래스의 용도는 XML 리소스를 전개하여 뷰 객체를 만듭니다.
onCreate() 내부에서 아래처럼 선언되는 두가지 방법은 동일합니다.
setContentView(R.layout.main);
setContentView(View.inflate(this, R.layout.main, null);

조금 더 들어가자면,
setContentView(R.layout.main); 와

LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = (View) inflater.inflate(R.layout.main, null);
setContentView(v);
동일하다고 볼 수 있겠지요...

즉, setContentView() 메소드가 실행되면 인자로 넘겨준 XML 파일을 파싱하여 하나하나 생성하게 됩니다.
그리고 Activity가 그 인스턴스화된 View들을 보여주게 됩니다.
inflate()메소드도 동일하다고 볼 수 있겠습니다.

현재 화면 View에서 터치하는 코드를 만든다고 칩시다...
뻑나는 표시가 없는 코드기에, 안심하고 빌드 시키면... 결과는 참담합니다.
생성한 View 가 아무것도 아니란 말이지요.





위 코드처럼 inflate 시켜주면, 이상없이 돌아갑니다.
안드로이드는 알면 알수록 복잡하고, 참 재밌는 녀석임에 틀림없습니다


LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  View v = (View) inflater.inflate(R.layout.cameradetailinfo, null);
  setContentView(v);
  v.setOnTouchListener(vTouchListener);

 }

 View.OnTouchListener vTouchListener = new OnTouchListener() {

  @Override
  public boolean onTouch(View v, MotionEvent event) {
   // TODO Auto-generated method stub

   if (event.getAction() == MotionEvent.ACTION_DOWN) {

    할일....
    return true;
   }
   return false;
  }
 };



  
  출처- http://blog.naver.com/green187/110103693779
cnfasdfl;kasdjflksd LayoutInflater 에 관한 고찰|작성자 미니187

댓글 없음:

댓글 쓰기