Resources

Posted by muchag | Android |
初回投稿:2011-04-15 (金) 23:31:20 | 最終更新:2011-07-06 (水) 17:11:05

スクリプトを記述していると、リソースに指定したものを使いたくなるときがある。
Resources は、そんなときに利用できるクラス。

Android Developers:Context Resources

頻度の高い例として
[android]TextView textView = new TextView();
textView.setText(R.string.hoge);[/android] なんていうのがあるが、R.string.hoge というのは実は数値でしかないので
setText メソッドに直接使うと変換してくれるが
[android]TextView textView = new TextView();
textView.setText(R.string.hoge + R.string.hoi);[/android] なんてしてみると楽しいことが起きる。

文字列のつもりで連結させようとしても無理なのだ。
(私が実際にやってしまったのはバレバレ) 🙄

世の中そんなに甘いわけはなく
こういう場合に利用できるのが Resources クラス。
[android]Resources resources = getResources();
String myHoge = resources.getString(R.string.hoge);[/android] Android Developers:Context getResources

このようにすることで、実際の文字列を取得できるので
後はいつものように処理できる。

Resources クラスのメソッドは、もちろん getString だけではない。
型に合わせて色々あるので、上記ページを参考に。
 

getIdentifier

getIdentifier メソッドはリソース名を動的に設定したい場合に有効。

public int getIdentifier (String name, String defType, String defPackage)

Android Developers:Resources getIdentifier

第1引数:リソース名文字列
第2引数:リソースタイプ文字列
第3引数:パッケージ名文字列
 

静的取得

リソースを取得したい場合、私は以下のようにしている。
[android]Resources resources = getResources();
String myHoge = resources.getString(R.string.hoge);

または

String myHoge = getResources().getString(R.string.hoge);[/android]  
ところが、hoge の部分を入れ替えたいときがあり
手動(入れ替え分コードを記述するの)では困ることがある。

そんなときは、getIdentifier メソッドの出番。
 

動的取得

R.string.hoge
という記述は int 型のオブジェクト。

だから
R.string.hoge0
R.string.hoge1
R.string.hoge2

これらを
R.string.hoge + i
とか
R.string.”hoge” + i
のように記述したくなるがこれはできない。

そこで
[android]for (int i = 0; i < 3; i++) { // リソース ID を取得 int myInt = getResources().getIdentifier("hoge" + i, "string", getPackageName() ); // 取得したリソース ID を利用して文字列を取得 String myHoge = getResources().getString(myInt); // 取得した文字列をログへ書き出し Log.i("Test", myHoge ); }[/android] このようにしてやることで、動的にリソース名を設定できる。

Posted by muchag | Android |
初回投稿:2011-04-15 (金) 23:31:20 | 最終更新:2011-07-06 (水) 17:11:05

コメントはまだありません »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment