재사용 가능한 UI 컴포넌트로 레이아웃 구성하기
안드로이드 플랫폼은 아주 다양한 UI 위젯을 제공합니다. 작은 위젯 조각을 합쳐서 복잡하고 정교한 인터페이스를 사용자에게 보여줄 수 있습니다.
하지만 애플리케이션을 개발 할 때 더 수준높은 인터페이스가 필요 할 때가 있습니다. 이 인터페이스를 완성하면서 그것도 효율적으로 만들기 위해서는 수 개의 표준위젯을 하나이면서
재사용이 가능한 컴포넌트로 합쳐야 합니다.
예를 들어 프로그레스바와 취소버튼이 있고 아이콘과 제목, 설명이 있고 Positive 와 Negative 액션과 등등이 포함된 패널을 만듭니다.
이런 UI 컴포넌트를 만들기 위해서는 커스텀 뷰를 만드는 방법도 있지만 XML을 통해서 더욱 쉽게 할 수 있습니다.
안드로이드의 XML 레이아웃 파일에서 각각의 태그는 클래스 인스턴스에 맵핑(상호 연결)되어 있습니다.
클래스는 항상 뷰의 서브클래스이고 UI 툴은 뷰의 인스턴스에 맵핑되어있지 않은 세가지 태그를 지원합니다. <requestFocus />, <merge >, <include /> 입니다.
이 기술문서는 <include /> 태그를 어떻게 사용해서 순수하게 XML 로만 작성한 컴포넌트를 만드는지 알아보겠습니다.
<include /> 문과 같이써서 강력한 효과를 내는 <merge /> 태그의 사용법은 Merging Layouts 문서를 참고하세요.
<include /> 의 하는 일은 이름 그대로입니다.
즉, 다른 XML 레이아웃을 포함(include)하는 것입니다. 이 태그를 사용하는 것은 아래의 예제에서 보이는 것과 같이 아주 직관적입니다.
아래 예제는 안드로이드 내장 애플리케이션인 the source code of the Home application 에서 직접 가져왔습니다.
<com.android.launcher.Workspace android:id="@+id/workspace" android:layout_width="fill_parent" android:layout_height="fill_parent" launcher:defaultScreen="1"></com.android.launcher.Workspace>
<include /> 태그안에서는 layout 속성만 써야합니다. 이 속성은 android 접두어가 붙지 않으면 포함 시키고자 하는 레이아웃 파일을 참조합니다. (사용한다는 말)
이 예제에서는 똑같은 레이아웃이 3번 연속으로 적용되었습니다. 이 태그는 또한 포함시키고자 하는 레이아웃의 몇가지 속성들을 오버라이드 할 수도 있습니다.
위의 예제에서는 android:id 를 사용해서 포함된 레이아웃의 루트 뷰(최상단 뷰)에 id를 부여 할 수 있습니다. id가 부여 되면 포함된 레이아웃의 id 도 오버라이드 됩니다.
또한 모든 레이아웃의 속성값들을 오버라이드 하는것도 가능합니다. 즉, 어떠한 android:layout_* 속성이라도 <include /> 태그안에서 쓰일 수 있다는 말입니다.
아래 예제에서는 똑같은 레이아웃이 두번 포함되었는데 첫번째 것만 레이아웃 속성들을 오버라이드 했습니다.
살펴보죠.
<!-- override the layout height and width --> <include layout="@layout/image_holder" android:layout_height="fill_parent" android:layout_width="fill_parent" /> <!-- do not override layout dimensions; inherit them from image_holder --> <include layout="@layout/image_holder" />
주의
안드로이드 위젯의 dimension(폭과 높이)를 오버리아드 하고자 한다면 android:layout_height와 android:layout_width 속성을 다 오버라이드해야 합니다.
어느 한 가지 속성만 오버라이드 해서는 안됩니다. 한 가지만 오버라이드 하게 되면 아무 효과도 나타나지 않습니다. (weight 같은 이외의 속성들은 소스레이아웃에서 상속됩니다.)
<include />태그는 기기의 설정에따라 UI의 일부 특정한 부분만 수정하고자 할 때 매우 유용합니다.
예를 들어 액티비티의 메인 레이아웃 layout/ 폴더에 넣고 다른 레이아웃은(화면 방향을 예로 들어) layout_land/ 나 layout_port/ 폴더에 따로 보관 할 수 있습니다.
이렇게 레이아웃을 따로 보관한다면 유지보수가 한 층 더 용이해지는 것은 당연하겠죠.
'안드로이드 > 문서번역' 카테고리의 다른 글
재사용 가능한 UI 컴포넌트로 레이아웃 구성하기 (8) | 2011.02.23 |
---|---|
윈도우 백그라운드 & UI 속도 (4) | 2011.02.22 |
효율적인 레이아웃 구성하는 기법 (51) | 2011.02.21 |
리스트뷰 백그라운드의 최적화 (5) | 2011.02.19 |
메모리 누출 피하기 (4) | 2011.02.19 |
잘 보고 갑니다~ ^^
다크웨인 address modify / delete reply
열심히 번역해 주셨네요~~
팁 정리중인데 좋은 팁 봐서 기분이 좋네요 ^^
앞으로도 부탁드립니다~~^^
한냥 address modify / delete reply
감사합니다.
dmdss address modify / delete reply
감사합니다~!! 잘보고 갑니다~!!
감사합니다.
bund2002 address modify / delete reply
좋은자료 잘봤습니다. 완벽히 이해되진않지만 감사합니다^^;
호야 address modify / delete reply
감사합니다. 잘 보고 있습니다.
androi address modify / delete reply
감사합니다!! 너무나 감사합니다.
이렇게 정보 공유 해주시는 분들이 있어
초보자들은 힘을 얻습니다..