테마 적용하기
참고 프로젝트: 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);
}
}