高畑 匡秀

2014.07.09

Androidでよく使うxmlまとめその1

Androidでよく使うxmlまとめその1

こんにちは。高畑です。
最近Androidでxmlを書くことが非常に多いです。Androidのプログラムとは何なのかと自問自答しています。
という訳で一体自分が普段どれだけxmlを書いているのかまとめてみたくなりました。
Android Lやmaterial designが賑わっている中であえての原点回帰です。

今回紹介するのは基本的なものです

  • layout
  • string
  • array
  • style
  • color
  • dimen
  • menu

配置場所一覧

xml 配置場所
layout res/layout/filename.xml
string res/values/filename.xml
array res/values/filename.xml
style res/values/filename.xml
color res/values/filename.xml
dimen res/values/filename.xml
menu res/menu/filename.xml

ちなみに、style.xmlやstring.xmlと良く表記されていますが
便宜上そう呼ばれるのであって、別にそのファイル名にする必要はないです。
中の記述によって~xmlが定義されます。
よくある例でViewのスタイルはstyles.xmlに記述し、アプリケーションやアクティビティのスタイルはthemes.xmlに記述することがあります。
ひとつのxmlファイルに全て定義せずに、用途によって分割すると可読性が上がります。

layout.xml

これがないと何も始まらないですね

動的にViewを取得してtoastにカスタムViewを設定する

このLayoutInflaterで動的にViewを取り出してセットする流れは
ToastやActionBarにカスタムレイアウトを適用するだけでなく
何かのアクションにあわせてaddViewしてViewを追加したりと
色々な場面で使います。

string.xml

普通の文字列だけではなく、置換パラーメーターを持った文字列やHTMLも文字列として持っておけます。
ただしHTMLの文字列はエスケープしたものを入れる必要があります。
ただし対応しているタグは以下の3つです。

  • <b> for bold text.
  • <i> for italic text.
  • <u> for underline text.
    • 置換パラメーターの「%1$d」や「%2$s」の1や2はgetStringで渡した引数の順番に対応しています。
      多言語対応で、ここの順番が重要になってきます。
      例えば日付を表示する場合に日本だと「年、月、日」の順番で
      どこか別の国では「日、月、年」という順番になることもあります。
      そういった場合でも

      getStringで以下のような引数を指定したとき

      言語設定が日本だと
      「2014年7月6日」と表示され
      その他の言語だと「6Day7Month2014Year」と表示されます。

      array.xml

      固定値で配列を用意しておきたい場合に使います。
      使い道としてはListViewやSpinnerのAdapterに入れる値が固定の場合に用意しておくという感じでしょうか…
      都道府県の配列をxmlで用意して

      ListViewに使用したり

      Spinnerに使用します

      intの配列も作ることができます。

      intの配列はあまり使う場面に出くわさないですね……

      style.xml

      htmlで言うところのcssファイルです。
      スタイルは「parent」を指定することでスタイルを継承することができます。
      継承したスタイルは親のスタイルを引き継いでいるので、子のスタイルでは必要なスタイルを追加したり、オーバーライドするだけで変更が済みます。

      「TextViewStyle」をテキストビューに設定すると
      textSize「15sp」
      textColor「#ff0000」
      margin「10dp」
      が適用されます。

      アクティビティにスタイルを当てる

      applicationタグのthemeにスタイルを指定するとアプリケーション全体にスタイルが適用され、activityタグのthemeにスタイルを指定するとそのAcitivtyに対してのみ適用されます。

      color.xml

      色を変数で持っておけます。
      使う色は多くても3,4色に抑えておくとアプリに統一感が出ます。
      FacebookやTwitter、Google+などのアプリもテキストカラーを除けばほぼアクションバーにアプリの色を1色出しているだけです。

      プログラム上で取り出したり

      layout.xmlで参照できます。

      気分が変わってアプリのカラーを操作したい時でもcolors.xmlをいじれば全てに適用されるので、気軽に模様替えできます。

      dimen.xml

      基本的にデザインガイドラインに即したマージンやテキストサイズを用意して
      必要に応じて足していくという感じでしょうか。
      ただしあまり細かく分けすぎずに大まかに「大」「中」「小」とテキストやマージンのサイズを用意しておくのが良いと言われてます

      プログラム上で取り出したり

      layout.xmlで参照できます。

      menu.xml

      アクションバーで表示されるメニューです。
      supprot-v7は使わない想定で書いてます。

      アクティビティにメニューを適用させる

      このまま続きを書くとすごい量になりそうだったので今回はここまでにしておきます。
      ここで紹介したものはとても基本的なものですが、可能な限りxmlファイルにしておくことで
      string.xmlでの多言語化だけでなく、国別、画面解像度別、OSのバージョン別に
      デザインも変えることもできるので変更に強いアプリに仕上がります。
      個人的にはstyle.xmlを綺麗に使えると感動します。

      次回その2予告

      • selector
      • shape
      • anime
      • animation-list
      • layer-list

      など……