본문 바로가기

프로그래밍/Android

LayoutInflater를 사용해 레이아웃 구성하기

 

기본구조.

LayoutInflater는 일종의 xml 파서이다.

layout 을 위해 xml에 기술된 데이터를 파싱해서 ViewGroup을 생성하는 역할을 한다.

파싱된 ViewGroup으로 하위 뷰들을 findViewById() 등을 통해 접근할 수 있게 된다.

 

 

1. 일단 메인 레이아웃을 읽어온다.

LayoutInflater inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE );

ViewGroup mainLayout = inflater.inflate( R.layout.main_layout );

 

2. 덧붙일 레이아웃을 읽어온다.

ViewGroup subTitleLayout = inflater.inflate( R.layout.sub_title_layout );

ViewGroup subCommandLayout = inflater.inflate( R.layout.sub_command_layout );

ViewGroup foregroundLayout = inflater.inflate( R.layout.foreground_layout );

 

3. 메인 레이아웃에 attach

mainLayout.add( subTitleLayout, 1);

mainLayout.add( subCommandLayout, 2);

mainLayout.add( foregroundLayout, 3);

 

4. 액티비티에 설정

setContentView( mainLayout );

 

 

위 내용에는 layout parameters 에 대한 언급이 없다.

layout params은 xml 에서 가장 많이 보게되는 layout_width, layout_height 값이다.

 

위소스처럼 각각의 레이아웃을 분리하게 되면 fill_parent 에 대한 영역이 모호하게 된다.

분리된 xml 의 최상위 태그에서의 fill_parent는 화면 전체가 되지만, 다른 레이아웃의

하위 레이아웃으로 삽입되면 fill_parent는 말그대로 부모의 크기가 되어 버린다.

 

따라서, 기존 xml에 설정된 값은 의미가 없어지고, 이 값을 새로이 설정해야 한다.

 

각 레이아웃은 setLayoutParams() 메쏘드를 사용해 레이아웃의 크기를 설정할 수 있다.

각각의 레이아웃은 static 클래스로 LayoutParams 을 가지고 있는데,

부모가되는 레이아웃의 LayoutParams 를 설정해야 한다.

 

만약 부모가 되는 mainLayout이 FrameLayout 이라면

그 자식은

subTitleLayout.setLayoutParams ( new FrameLayout.LayoutParams(

ViewGroup.LayoutParams.FILL_PARENT,

ViewGroup.LayoutParams.FILL_PARENT );

와 같이 설정되어야 한다.

 

 

* 일반적으로 FrameLayout 이나 RelativeLayout 같이 화면 전체를 전부 활용하는 레이아웃들에

대해 레이아웃들을 레이어 개념으로 분리해서 작성하는게 효과적이다.

'프로그래밍 > Android' 카테고리의 다른 글

에뮬레이터에서 data,system 디렉토리 가져오기  (0) 2010.02.04
JNI 기본사항  (0) 2010.01.15
플랫폼 make/ 모듈 추가 방법  (0) 2010.01.15
커널 빌드하기  (0) 2010.01.14
서비스1 - 로컬서비스  (0) 2009.12.22
액티비티 변경 에니메이션  (0) 2009.12.06
Animation 관련 샘플  (0) 2009.12.06
ViewFlipper로 뷰 교체하기  (0) 2009.12.06
에니메이션 interpolater  (0) 2009.12.06
커스텀속성과 R.styleable  (0) 2009.11.25