Android、文字列からリソースIDを取得しますか?質問する

Android、文字列からリソースIDを取得しますか?質問する

クラスの 1 つにあるメソッドにリソース ID を渡す必要があります。参照が指す ID と文字列の両方を使用する必要があります。これを最も効果的に実現するにはどうすればよいでしょうか?

例えば:

R.drawable.icon

これの整数 ID を取得する必要がありますが、文字列「icon」にもアクセスする必要があります。

メソッドに渡す必要があるのが「アイコン」文字列だけであれば望ましいでしょう。

ベストアンサー1

@EboMike: そんなものがあるなんて知りませんでしたResources.getIdentifier()

私のプロジェクトでは、次のコードを使用してこれを実行しました。

public static int getResId(String resName, Class<?> c) {

    try {
        Field idField = c.getDeclaredField(resName);
        return idField.getInt(idField);
    } catch (Exception e) {
        e.printStackTrace();
        return -1;
    } 
}

R.drawable.iconリソースの整数値を取得するには、次のように使用します。

int resID = getResId("icon", R.drawable.class); // or other resource class

Resources.getIdentifier()私が行ったようにリフレクションを使用するよりも遅いというブログ投稿を見つけました。それをチェックしてください

警告: Google の提案どおりにコード/リソースの縮小が有効になっている場合、このソリューションはリリース ビルドで失敗します。https://developer.android.com/build/shrink-code
また、他のケースでは失敗する可能性があります。例えば、実際<string name="string.name">…</string>のフィールド名がstring_namestring.name

おすすめ記事