Unmotivated

やる気はない

Strings などのリソースを動的に取得する

Android において、静的にリソース名を指定せずに、動的にリソースIDを取得したいことが時々あります。

ある範囲のリソースが欲しいなど、一定の規則でリソース名が決まっている場合は以下の方法でリソースが取れます。

1
2
3
4
5
6
7
// prefix0, prefix1, prefix2, ... と言う名前のリソースを取得する
for(int i=0;; i++) {
    int resourceId = getResources().getIdentifire("prefix" + String.valueOf(i), "string", getPackageName());
    if(resourceId == 0) break;
    // リソースを取得
    String str = getResources().getString(resourceId);
}

全てのリソースが欲しい場合は Reflection でなんとかなります。
例えば Strings に定義されたリソースを全て取得したい場合は、以下で取得可能です。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Field[] fields = R.string.class.getFields();
for(Field field:fields) {
    try {
        int resourceId = field.getInt(R.string.class);
        if(resourceId != 0) {
            // リソース名
            String resourceName = field.getName();
            // リソースを取得
            String str = getResources().getString(resourceId);
        }
    }catch(IllegalAccessException e){
        Log.d(TAG, e.getMessage());
    }
}

Android

« Google Glass レビュー

Comments