도래울

안드로이드 Inflate LayoutInflater에 관한 고찰 본문

개발/Android

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

도래울 2016. 2. 5. 12:58

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;
  }
 };



Comments