web-dev-qa-db-ja.com

名前がわかっている場合、画像のリソースIDを取得するにはどうすればよいですか?

(Androidで)画像の名前を知っている場合、画像のリソースIDを取得するにはどうすればよいですか?

131
manu

このようなもので:

String mDrawableName = "myappicon";
int resID = getResources().getIdentifier(mDrawableName , "drawable", getPackageName());
261

これを試すこともできます:

try {
    Class res = R.drawable.class;
    Field field = res.getField("drawableName");
    int drawableId = field.getInt(null);
}
catch (Exception e) {
    Log.e("MyTag", "Failure to get drawable id.", e);
}

このソースコードを以下のURLからコピーしました。このページで行われたテストに基づいて、getIdentifier()より5倍高速です。また、より便利で使いやすいことがわかりました。それがあなたにも役立つことを願っています。

リンク:Androidでリソースを動的に取得する

28
VSB

パブリックシステムリソースの例:

// this will get id for Android.R.drawable.ic_dialog_alert
int id = Resources.getSystem().getIdentifier("ic_dialog_alert", "drawable", "Android");

alert

別の方法は、 Android.R.drawable クラスのドキュメントを参照することです。

10
naXa

この関数を使用して、リソースIDを取得できます。

public static int getResourseId(Context context, String pVariableName, String pResourcename, String pPackageName) throws RuntimeException {
    try {
        return context.getResources().getIdentifier(pVariableName, pResourcename, pPackageName);
    } catch (Exception e) {
        throw new RuntimeException("Error getting Resource ID.", e)
    } 
}


したがって、DrawableリソースIDを取得する場合は、次のようにメソッドを呼び出すことができます。

getResourseId(MyActivity.this, "myIcon", "drawable", getPackageName());

(またはフラグメントから):

getResourseId(getActivity(), "myIcon", "drawable", getActivity().getPackageName());


StringリソースIDの場合、次のように呼び出すことができます。

getResourseId(getActivity(), "myAppName", "string", getActivity().getPackageName());

等...


Careful:リソースIDが見つからなかった場合、RuntimeExceptionをスローします。運用環境で適切に回復してください。

これを読む

10
Azhar

私が遭遇したもう1つのシナリオ。

文字列imageName = "Hello"を取得し、最初の引数としてgetIdentifier関数に渡すと、名前に文字列null終了を渡し、常にゼロを返します。このimageName.substring(0、imageName.length()-1)を渡します

0
sunil shah