2014年4月2日水曜日

【Android】設定画面

PreferenceActivityとか
PreferenceFragmentとか
Androidには設定画面を簡単に作るための仕組みが存在する.

XMLで記述して(Javaを使わず)設定画面を作れるのだ.

だが,私はそれらを使ったことがない.
使おうとしたことは何度かあるのだが.


第一の理由として
PreferenceActivityはAPI Lv.11(Android3.0)でDeprecated
つまり使うなと.
PreferenceFragmentはAPI Lv.11未満では使えない.
今でもAPI Lv.7(Android2.1)を基準としてアプリを作っているため
PreferenceFragmentは論外なのである.
FragmentActivityやDialogFragment,FragmentPagerAdapterなどのFragment群は
android-support-v4サポートライブラリに含まれており
API Lv.4(Android1.6)以降で使用可能なのだが,
PreferenceFragmentはそこに含まれていない.
つまり使うなと.

使えないじゃん.
PreferenceActivityをDeprecatedにもかかわらず使う
というのが一般的なようだが.

Deprecatedをあっさり使用不可にされることが多々あるので
(そのための死の宣告としてのDeprecatedなのだが)
Deprecatedは使わないほうが宜しい.


第二の理由として
PreferenceActivity,PreferenceFragmentともに
PreferenceScreenというタグ(もといクラス)を使ってXML上で記述することになるのだが
XMLで書くということはJavaソース上のpublicでstaticなフィールドにアクセス出来ない.

設定を保存・呼び出しするためのキー
(例:背景色をKEY_BACKGROUNDというキーに保存し,KEY_BACKGROUNDを指定して設定を取得する)
を設定保存側のXMLと呼び出し側のソースコードとで別々に書くのは避けたい.
一文字スペルミスがあれば呼び出せなくなるし
キーを変更しようとしたらその文字列をコーディングしているところ全て書き換えないといけない.
キーは全て同一のオブジェクトを参照したいのだ.
仕様変更で設定そのものを消したい場合にもキーのオブジェクトを消せば
参照先が全てエラーになるのでそこを修正していくこともできる.

XMLで使うためのリソースファイルなのだろうが,
ストリングリソースはContext継承クラスからでないとアクセスできない.
設定はActivityやServiceからしか取得しないと言い切れる場合はそれでいいかもしれない.
規模にもよるが経験上,まずそんなことはないので
ストリングリソースをキーには使えない.

PreferenceScreenというタグ(もといクラス)と書いたとおり,
これはJavaソースコード上でも書けるのだが,
ソースコードで記述するならもうPreferenceScreenを使うメリットは薄いんじゃない.


他の理由としては使えるコンポーネントが限られていることか.


などという理由により設定画面はいつも通常のActivityで作っている.
これまではアプリごとに設定画面を作っていた.

自前でよくつかうコンポーネントをまとめて設定UIライブラリを作ったほうがいいと思う.

0 件のコメント:

コメントを投稿