일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 앱스토어
- simulator
- Xcode
- UITableView
- afterdelay
- Example
- loop
- 포켓몬 GO
- IOS
- swift
- swift3
- UIView
- 샘플
- 얻는법
- 아이폰7
- 신도림 테크노마트
- push
- Bitcode
- GCD
- 스마트폰
- 보라카이
- LG유플러스
- 해몽
- 신도림
- setting
- error
- 포켓볼
- 공략
- Check
- 페이백
- Today
- Total
도래울
안드로이드 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; } };
'개발 > Android' 카테고리의 다른 글
Android Intent 와 Intent filter (0) | 2016.02.05 |
---|---|
[Android] 많은 버튼의 클릭이벤트 처리 : button onClick() : OnClickListener (0) | 2016.02.05 |
안드로이드 위젯에서 Activity 호출하기 (0) | 2016.02.05 |
Activity State Stubs (0) | 2016.02.05 |
Android drawable-dpi (0) | 2016.02.05 |