文字列からリソースIDを取得する

  • 80
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

随分前にブログに書いたのですが、アクセスが多かったのでこちらにも書きます。
http://t-kashima.hateblo.jp/entry/20110203/1296748262

ここでは色々な方法でリソースIDを取得する方法を説明します。

文字列からリソースIDを取得する

R.string.text が直接指定できず、文字列を利用してリソースIDを取得します。

int strId = getResources().getIdentifier("text", "string", getPackageName());

同じように R.id.text_view のリソースIDを取得したい場合は以下のようにします。

int viewId = getResources().getIdentifier("text_view", "id", getPackageName());

そしてこれらを組み合わせると、TextViewを取得して文字列を設定することができます。

Resources res = getResources();
int strId = res.getIdentifier("text", "string", getPackageName());
int viewId = res.getIdentifier("text_view", "id", getPackageName());
TextView textView = (TextView)findViewById(viewId);
textView.setText(res.getString(strId));

変数と文字列からリソースIDを取得する

このやり方が便利なのは文字列とfor文の変数を使ってリソースIDを取得する場合です。

int strId, viewId;
String resViewName, resStrName;
TextView textView;
Resources res = getResources();
for(int i = 0; i < MAX; i++){
    resStrName = "str" + i;
    strId = res.getIdentifier(resStrName, "string", getPackageName());
    resViewName = "text_view" + i;
    viewId = res.getIdentifier(resViewName, "id", getPackageName());
    textView = (TextView)findViewById(viewId);
    textView.setText(res.getString(strId));
}

こうすることで動的に文字列やビューを取得することができます。