반응형
=================================
=================================
=================================
출처:
http://jetblog.tistory.com/tag/%3Cinclude%20/%3E
재사용 가능한 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/ 폴더에 따로 보관 할 수 있습니다.
이렇게 레이아웃을 따로 보관한다면 유지보수가 한 층 더 용이해지는 것은 당연하겠죠.
=================================
=================================
=================================
출처: http://eraserdev.tistory.com/entry/Layout-Include-%ED%95%98%EA%B8%B0
예전에 http://eraserdev.tistory.com/9 에서를 XML에서 처리가 가능한걸 오늘 알았다.
역시 무식하면 손이 고생이다.
- 인크루드 될 레이아웃
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/line4"
android:layout_alignParentBottom="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<Button android:id="@+id/configBT"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:textSize="10px" />
<TextView android:id="@+id/updateTimeTV"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textSize="14px"
android:textColor="#BBBBBB"
android:text="Updated : 00:00" />
<Button android:id="@+id/selfupdateBT"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:textSize="10px" />
</FrameLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@+id/mainRL"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<include layout="@layout/include_bottom"/>
</RelativeLayout >
=================================
=================================
=================================
반응형
'스마트기기개발관련 > 안드로이드 개발' 카테고리의 다른 글
안드로이드 Group List 관련 (0) | 2011.05.17 |
---|---|
안드로이드 로딩하면 띄우기 관련 (0) | 2011.05.17 |
[번역] 안드로이드 Layout Tricks (0) | 2011.05.12 |
안드로이드 UI - droiddraw (0) | 2011.05.02 |
안드로이드 개발툴 UI 관련 (0) | 2011.05.02 |