테마 적용하기

참고 프로젝트: ThemeDemoA1

테마는 스타일 묶음이라고 할 수 있다. 그래서 테마를 적용하기 위해서는 가장 먼저 스타일을 선언해야 한다. 우리는 다음 그림처럼 타이틀이 없으면서 텍스트 크기는 크고 이탤릭체인 스타일을 적용해서 액티비티에 테마로 적용할 것이다.

스타일을 정의한 파일은 /res/values 디렉터리에 생성하면 된다.

스타일은 자바 클래스처럼 상속해서 확장할 수 있다. 그래서 가장 기본적인 스타일을 정의하고, 이 스타일을 상속해서 다른 스타일을 만드는 것이 일반적이다. 이러한 구조를 보여주기 위해 다음 코드는 일부러 두 개의 스타일을 정의했다. 먼저 Theme라는 이름을 가진 스타일은 액티비티의 타이틀을 보이지 않게 하는 속성을 가지고 있다. 그리고 Theme.big 스타일에서는 Theme 스타일을 상속해서 텍스트 크기 및 폰트 스타일을 정의하고 있다.

코드 스타일 XML - /res/values/styles.xml

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

    <style name="Theme">
        <item name="android:windowNoTitle">true</item>
    </style>

    <style name="Theme.big" parent="Theme">
        <item name="android:textSize">20sp</item>
        <item name="android:textStyle">italic</item>
    </style>

</resources>

지금 정의한 스타일을 특정 뷰가 아닌 액티비티 전체에 적용할 것이므로 텍스트뷰에 선언해서는 안된다. 액티비티 전체에 적용하기 위해서는 AndroidManifest.xml에 테마로 정의해야 한다.

코드 AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.androidside.ThemeDemoA1"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="15" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".Main"
            android:label="@string/app_name"
            android:theme="@style/Theme.big" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

android:theme="@style/Theme.big"
<activity>에 선언한 android:theme는 액티비티의 테마를 정의하는 코드이다.

테마는 AndroidManifest.xml가 아닌 자바 코드에서도 정의할 수 있다. 주의할 점은 setContentView() 메소드를 호출하기 전에 setTheme() 메소드를 호출해야 제대로 적용된다는 것이다.

코드 Main.java

package com.androidside.ThemeDemoA1;

import android.app.Activity;
import android.os.Bundle;

public class Main extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState);
        setTheme(R.style.Theme_big);
        setContentView(R.layout.main);
    }
}

results matching ""

    No results matching ""