상세 컨텐츠

본문 제목

[android]스타일과 테마

Android 개발

by mobile 2013. 2. 24. 16:04

본문

반응형

안드로이드 프로젝트를 진행하는 동안 개발 표준을 만들 수 있는 몇가지 기능을 제공한다. 그중에 하나가 문자열과 같이 화면 구성이나 작동 방법 그리고 필요한 색상에 대해 통일된 XML 속성들은 Styles과 Themes라는 이름으로 사전에 전한 속성들을 담을 수 있는 XML 문서를 제공한다.


style.xml (res\values\)

<resources xmlns:android="http://schemas.android.com/apk/res/android">

<style name="CodeFont" parent="@android:style/TextAppearance.Medium">

   <item name ="android:layout_width">fill_parent</item>

   <item name="android:layout_height">wrap_content</item>

   <item name="android:textColor">#00ff00</item>

   <item name="android:typeface">monospace</item>

</style>

</resources>


스타일이나 테마는 서로 적용하는 대상만 다를 뿐 사용하는 요소나 문법은 동일하다.

스타일 과 테마는 각각 보관하는 XML 문서로 구분된다. 스타일은 'res\values\styles.xml' 라는 파일로 보관되고, 테마는 'res/values/themes.xml' 라는 파일로 보관된다.


스타일과 테마에 적용되는 문법은 아래와 같이 <style> 요소와 적용하고나 하는 개별 속성인 <item>이라는 하위 요소로 구성되어 있다.

<?xml version="1.0" encoding="utf-8" ?>

<resources>

<style name="style_name" parent="@[package:]style/style_to_inherit">

<item name="[@package:]style_property_name">item_value</item>

</style>

</resource>


<resource> 요소는 스타일 문서의 루트 요소이며, 안드로이드에서 리소스로 분류됨을 뜻한다. 

<style> 요소의 속성은 다음과 같이 구성된다.

- name : 스타일 요소의 이름이다. 안드로이드에서 스타일을 구분하는 이름으로 사용한다.

- parent : 상위 스타일 요소의 이름 옵션이다. 상위 스타일의 모든 하위 아이템 요소와 요소 값들은 해당 스타일 요소가 상속받는다. 상속받은 아이템 요소가 해당 스타일내 존재한다면, 상속받은 요소 값들은 오버라이드 된다.


<item> 요소는 스타일을 적용하면서 부여하고자 하는 속성과 속성값을 뜻한다. 스타일 요소 내부에는 하나 이상의 아이템 요소와 요소 값을 갖는다.


아이템 요소는 name 이라는 속성으로 뷰나 레이아웃의 속성을 구분하게 되며, 아이템의 요소값은 세부적인 XML 속성값들을 정의하게 된다.


자바에서 스타일이나 테마를 참조 할때는 R.style.styleID 이란 아이디를 사용하거나 또는 개별 아이템을 참조할 때는 R.style.styleID.itemID으로 사용한다. 그리고 XML에서 참조할 때는 '@[package:]style/styleID' 또는 개별 아이템을 참조할 때 '@[package:]style/styleID/itemID' 으로 표시한다.


테마는 애플리케이션(또는 액티비티) 단위로 적용할 수 있는 하나 이상의 속성 집합이다. 예를 들어 애플리케이션에서 사용하는 전체 화면내 뷰의 앞부분과 뒷부분을 특정 색깔을 지정하거나, 메뉴의 텍스트 크기와 색을 지정하는 테마를 정의 할 수 있다.


테마 역시 스타일처럼 XML의 <style> 요소로 선언되며 같은 방식으로 참조된다. 스타일과 달리 테마는 AndroidManifest.xml 내에 있는 <application>과 <activity> 요소를 통해, 애플리케이션 또는 개별 액티비티에 적용된다. 


theme.xml

<?xml version="1.0" encoding="utf-8"?>

<resources xmlns:android="http://schemas.android.com/apk/res/android">

    <style name="CustomTheme" parent="android:Theme.Light">

        <item name="android:windowBackground">@color/custom_theme_color</item>

        <item name="android:colorBackground">@color/custom_theme_color</item>

    </style>

</resources>


사용 방법은 AndroidManifest.xml 파일에서 <application> 태그 내에 <application android:theme=@style/CustomTheme"> 와 같이 포함시킨다. 만약 하나의 액티비티에만 테마를 적용하고자 한다면, <application> 대신 <activity>요소에 추가하면 된다.


자바 프로그램 내엥서 테마를 적용하기 위해 ContentThemeWrapper.setTheme() 메서드를 사용할 수 있다. 사용 방법은 setContentView(View) 메서드를 호출하기 이전 또는 public View inflate(int resource, ViewGroup root) 메서드를 호출하기 이전에 설정해야 한다.

반응형

관련글 더보기

댓글 영역