기본구조.
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 |