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
[출처] 안드로이드 inflate
|
2012년 5월 19일
안드로이드 inflate LayoutInflater 에 관한 고찰
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기