LayoutInflater
- inflate의 사전적 의미 : 부풀리다. 팽창하다.
- 안드로이드에서 inflate의 의미 : 전개
기능
1. XML 문서에 정의된 레이아웃과 Child 뷰의 속성을 읽어 실제 뷰 객체를 생성해내는 동작.
2. 레이아웃의 정보대로 객체를 생성하고 속성 변경 메소드를 순서대로 호출하는 것.
3. 동적으로 View를 교체할 수 있으며 복합적인 View를 여러 곳에서 공통으로 사용하고자할때 유용하다.
안드로이드에서 어떤 View가 화면에서 보일려면 반드시 객체화(인스턴스화)되어 있어야 된다.
안드로이드에서 뷰 객체를 생성하는 과정은 크게 2가지가 있다.
직접 코드 상에서 아래와 같이 생성하는 방법이 있고
1 | Button b = new Button( this ); // this는 context |
Inflate는 XML을 통해서 객체화 시키는 것을 의미한다.
보통 액티비티의 onCreate() 함수에서도 자주 쓰이는 setContentView() 메소드는 내부적으로
XML을 통해 뷰 객체를 생성하는 Inflate 과정이 포함되어 있다. 내부는 아래와 같이 동일하다.
1 2 3 4 | setContentView(View.inflate( this , R.layout.main, null )); LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); View v = (View)inflater(R.layout.main, null ); serContentView(v); |
이용해서 레이아웃 객체를 생성한 후 setContentView()를 통해서 그 생성된 레이아웃 객체를
올려도 동일한 결과가 나오게 된다.
Inflate에는 여러 종류의 메소드가 있다.
위에서 설명한 LayoutInflater, menu의 XML을 읽어들여 메뉴 객체를 구성하는 MenuInflater,
또 View 클래스의 정적 메소드로 inflate도 있다.
아래는 main layout 대신 커스터마이징된 dialog layout을 생성하는 코드이다.
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 | public class AlertCustom extends Activity { ... @Override protected Dialog onCreateDialog( int id) { switch (id) { case CUSTOM_DIALOG : AlertDialog.Builder builder; AlertDialog alertDialog; LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE); View layout = inflater.inflate(R.layout.custom_dialog, (ViewGroup) findViewById(R.id.layout_root)); TextView text = (TextView) layout.findViewById(R.id.text); text.setText( "Hello, this is a custom dialog!" ); ImageView image = (ImageView) layout.findViewById(R.id.image); image.setImageResource(R.drawable.icon); builder = new AlertDialog.Builder( this ); builder.setView(layout); alertDialog = builder.create(); return alertDialog; } return null ; } } |
출처 : http://warmz.tistory.com/579
'공부 > Android' 카테고리의 다른 글
안드로이드 타이틀 없이 화면 채우기(화면 꽉 채우기) (0) | 2012.10.28 |
---|---|
Gridview 썸네일 이미지 클릭시 확대하기 (0) | 2012.08.23 |
그리드뷰 GridView Xml (0) | 2012.08.23 |
일정시간 후 액티비티 자동으로 넘겨주기 (0) | 2012.08.22 |
타이머 (0) | 2012.07.25 |