pooh3's memo

Android周りを中心に。軽めに、いい加減さ50%程度で

Androidの定数はvaluesフォルダ内のリソース定義するべきか?コード内でfinal staticで定義するべきか?的なメモ

前の会社を諸事情というか自己都合で退職して、Androidの勉強が足りない!という欠乏みたいなものを補うために活動を色々始めた。

 

RxJavaやDroidux、Dagger2などを勉強するため、サンプルのAndroidのプロジェクトを作ってて、普段なら適当にこなしていた部分にふと立ち止まる。

 

題名通り、迷った。

 

そこでどういう基準で他の人が使っているかを調べてみた。

 

 

 

検索キーワード「android constants xml static」にしてgoogleさまにお伺いを立てる

https://www.google.co.jp/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=android%20constants%20xml%20static

 

 検索結果を見る。

 

http://stackoverflow.com/questions/16160047/android-strings-xml-vs-static-constants

↑上だと

 

 So my suggestion is

use string resources for the texts which will be displayed to user.

 and

use static constants for internal puposes of your program like database names, internal variable, intent filter name etc.

つまり訳すと。

 

  • ユーザーに表示される文字列は、文字列リソース(xml)から使え。
  • プログラム上で使う目的(データベース名や、内部変数、Intent-filterの名前など)では定数を使え。

大方同意だ。画面に表示する文字列については国際化対応には必須だろう。

 

次も見よう。またStackOverFlow。

 http://stackoverflow.com/questions/11150701/which-is-best-way-to-define-constants-in-android-either-static-class-interface

 

The biggest advantages of using project resources is the ease of access and that they allow you to organize your project significantly. 

 まぁ簡単に訳すと

  • XMLリソースにしておくとプロジェクトをより整理されたものにできる。

 

XMLにすべきものがここで大体、腑に落ちた。

つまり、

  • プロジェクトで管理する定数(valuesで管理)とそうでない定数(final static)でちゃんと分けろ。
  • 表示に使う文字列は国際化対応を想定して最初からstring.xmlにしておけ。

追加で言うなら。

XMLで定義しておくとlayoutファイルに直接使えるので

  • レイアウトに関する数値もdimens.xmlをvalues/values-w820pなどでフォルダで分けて、それぞれに定義にしておく事で、タブレット用数値の対応などがファイル単位で管理できる。

 

こんな感じかな。

 

応用編?

プロジェクトで共有して、自動で切り替えたい値があるとき。

フラグをgradleのflavor機能のBuild Variantsで自動に切り替えたいなら

http://qiita.com/shts/items/d94834437b22712415c5

にあるように自動生成されるBuildConfigファイルに定数をVariantsで切り替えられるようにしておくといい。

 

他にあればツッコミ欲しいかな。

つかQiitaでよくね?

Androidでアプリ上で使う定数の種類分類とその扱い方まとめ」

みたいな感じで。