2. StylesとThemesをUIに適用

Styleをセットするには2つの方法がある。
  • 個別のViewに対しては、レイアウトXMLのViewエレメントにStyle属性を追加する。
  • Activityもしくはapplication に対しては、AndroidマニフェストXMLに <activity> もしくは <application> エレメントに android:theme 属性を追加する。
レイアウトXMLで特定のViewにStyleを適用する場合は、プロパティを対象のViewにのみ適用する。もしStyleをViewGroupへ適用しても、子クラスのViewはそのStyleを継承しない。直接定義したプロパティのみが適用されることになる。但し、全てのViewエレメントにStyleを適用したい場合はStyleとしてThemeを使えば可能になる。

Themeとしてstyle定義を適用する場合は、AndroidマニフェストXMLにActivityもしくはapplicationにStyleを適用する必要がある。そうすると定義したそれぞれのプロパティがサポートされていればActivityもしくはapplicationに適用される。例えば、前述の例にあった CodeFont スタイルをActivityに適用する場合、全てのViewエレメントのStyleプロパティに適用される。いくつかのViewがプロパティをサポートしていない場合はそれらを無視することになる。いくつかのプロパティをサポートする場合はそれらのみ適用する。

StyleをViewへ適用

レイアウトXMLではどのようにStyleを定義するか。

<TextView
style="@style/CodeFont"
android:text="@string/hello" />

このTextViewはCodeFontとして定義されたStyleが適用されている。

Note: Style属性は名前空間のプレフィックスといsて android: は使っていない。

ThemeをActivityもしくはThemeへ適用

アプリケーションの全てのActivityにThemeを設定するには、AndroidManifest.xmlを開いて <application> タグにスタイル名を指定して android:theme 属性を追記する。例えば以下のようになる。

<application android:thme="@style/CustomTheme">

もしも特定のActivityに対してのみThemeを設定したい場合は上記の代わりに <activity> タグに android:theme 属性を追記する。

Androidはビルトインされたリソースを提供する。準備された多くのThemeを使うことが可能で、Themeの作成を避けることができる。例えば Dialog Theme を使うと Activityにダイアログボックスが表示される。

<activity android:theme="@android:style/Theme.Dialog">

もしもビルトインのThemeを気に入ったが微調整したい場合は、そのThemeを継承してカスタムスタイルを追加すればよい。例えば既存のDialog Themeを修正して背景画像を変更するには以下のように実装する。

<style name="CustomDialogTheme" parent="@android:style/Theme.Dialog">
<item name="android:windowBackground">@drawable/custom_dialog_background</item>
</style>

CustomDialogThemeを使うにはTheme.Dialogの代わりにAndroid Manifestに記載する。

<activity android:theme="@style/CustomDialogTheme">

Comments