상세 컨텐츠

본문 제목

재사용 가능한 UI 컴포넌트로 레이아웃 구성하기

스마트기기개발관련/안드로이드 개발

by AlrepondTech 2011. 5. 12. 15:43

본문

반응형
728x170

 

 

 

 

=================================

=================================

=================================

 

 

 

 

 

출처: 

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 > 

 

 

=================================

=================================

=================================

 

 

 

반응형
그리드형


관련글 더보기

댓글 영역