본문 바로가기

Android

custom theme

1. res/values 디렉토리 에 style.xml 생성 후 <resources> 루트 노드 추가

2. 스타일 or 테마에 대한 고유 이름과 parent attribute 를 가지는 style element를 추가한다. 이름은 스타일을 reference하기 위해 사용되고 parent 스타일은 상속받을 스타일을 가르킨다... (여기서도 상속이 +_+)

3. style element 내부에 하나 또는 그 이상의 item element 에 포맷 값이 정의 되어야 하며 각각의 item element 는 name attribute 를 가진다. 그것으로 스타일 속성을 구분하며 해당 element 안에 그 값을 정의할 수 있다.

4. 이렇게 생성된 리소스는 다른 manifest 나 소스에서 사용할 수 있다.

[code]
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="SpecialText" parent="@style/Text">
        <item name="android:textSize">18sp</item>
        <item name="android:textColor">#008</item>
    </style>
</resources>
[/code]


- item 의 name은 지정할 속성 content 에는 그 값을 정의 할 수 있다. 색의 경우 16진수 컬러 값을 지정한다.

- style 에 parent는 상속받을 style을 지정하는 것이고 이는 안드로이드의 표준 리소스를 상속해야 한다.


[code]
<EditText id="@+id/text1" style="@style/SpecialText" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Hello, World!" />
[/code]

- 사용 예제로 style 지정을 위의 style을 지정한 이름은 SpecialText 로 주었고 이를 적용하게 된다.


[code]
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CustomTheme">        
    <item name="android:windowNoTitle">true</item>
    <item name="windowFrame">@drawable/screen_frame</item>
    <item name="windowBackground">@drawable/screen_background_white</item>
    <item name="panelForegroundColor">#FF000000</item>
    <item name="panelBackgroundColor">#FFFFFFFF</item>
    <item name="panelTextColor">?panelForegroundColor</item>
    <item name="panelTextSize">14</item>
    <item name="menuItemTextColor">?panelTextColor</item>
    <item name="menuItemTextSize">?panelTextSize</item>
</style>
</resources>
[/code]


- 리소스 사용시 @ 가 붙은 건 이전에 다른곳 (아마도 android framework?) 에서 정의된 리소스를 레퍼런스 한다는걸 의미한다.

- 리소스 사용시 ? 가 붙은 건 현재 로드된 테마에서 리소스 값을 레퍼런스 한다는 뜻이다. 즉 위의 소스에서 panelTextColor 에 값이 ?panelForegroundColor 게 되어 있다는 것은 동일 위치의 리소스인 <item name="panelForegroundColor">#FF000000</item> 를 사용하겠다는 의미 인 것이다.


[code]
<application android:theme="@style/CustomTheme">
[/code]

- app 에 테마를 설정하는 것은 위와 같이 하면 된다.

- 하나의 activity에만 적용하려면 테마 정보를 activity 에 추가하면 된다.

[code]
<style name="CustomDialogTheme" parent="@android:style/Theme.Dialog">
[/code]

- 안드로이드 내에는 빌트인 된 리소스가 있기 때문에 activity 에 기본 테마를 적용할 수 있다.

[code]
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    setTheme(android.R.style.Theme_Light);
    setContentView(R.layout.linear_layout_3);
}
[/code]


- 소스상에서 테마를 적용하기 위해서는 반드시 임의의 뷰를 인스턴스 하기전에 설정해야 하며 setTheme 로 정의할 수 있다.

'Android' 카테고리의 다른 글

frame layout  (0) 2013.10.08
custom view (component)  (0) 2013.10.08
dialog notification  (0) 2013.10.08
notification  (0) 2013.10.08
focus  (0) 2013.10.08