テーマを使ってレイアウトを定義する


スタイルと同様の機能にテーマというものがあります。
テーマも、ビューやウィンドウの属性値をまとめて設定する機能なのですが、
テーマはスタイルのように個々のビューに対して設定するのではなく、
アプリケーションやアクティビティ全体に対して設定を行います。

詳細は続きからどうぞ

スタイルの定義

テーマの定義はスタイルと違いありません。
スタイルと同じようにres/values/以下にxmlファイルを作成しそこに記述します。

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyStyle">
    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">wrap_content</item>
</style>
    <style name="MyStyle2" parent="@style/MyStyle">
        <item name="android:textColor">#00FF00</item>
    </style>
<style name="MyStyle3" parent="@style/MyStyle">
	<item name="android:background">#ff0000</item>
    <item name="android:textColor">#ffffff</item>
</style>
</resources>

今回は例としてMyStyle3を設定してみたいと思います。
MyStyle3はMyStyleを継承しているので、
幅をfill_parent、高さをwrap_content、背景が赤色、文字色が白色、
という設定情報になります。

テーマの適用

テーマの設定はマニフェストファイルに記述する事で行います。

アプリケーションのすべてのアクティビティに対して
テーマを設定するにはマニフェストファイルに
applicationタグを使ってテーマ名を指定します。

<application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@style/MyStyle3">

テーマをアプリケーションのアクティビティにのみ適用する場合は
activityタグでテーマ名を指定します。

<activity android:name=".StyleSample" android:label="@string/app_name" android:theme="@style/MyStyle3">

アプリケーションからテーマを設定する事もできます。
アプリケーション上でsetTheme()メソッドを使って設定します。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
          setTheme(R.style.MyStyle3);
    setContentView(R.layout.main);
}

setContentViewメソッドを呼び出す前にsetTheme()メソッドを呼ばないと
テーマは設定されないので気をつけて下さい。

One Comment