Comment obtenir l'ID de ressource d'une image si je connais son nom (sous Android)?
Avec quelque chose comme ça:
String mDrawableName = "myappicon";
int resID = getResources().getIdentifier(mDrawableName , "drawable", getPackageName());
Vous pouvez aussi essayer ceci:
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);
}
J'ai copié ce code source depuis l'URL ci-dessous. D'après les tests effectués dans cette page, il est 5 fois plus rapide que getIdentifier (). Je l'ai également trouvé plus pratique et facile à utiliser. J'espère que cela vous aidera aussi.
Exemple pour une ressource système publique:
// this will get id for Android.R.drawable.ic_dialog_alert
int id = Resources.getSystem().getIdentifier("ic_dialog_alert", "drawable", "Android");
Une autre méthode consiste à consulter la documentation de la classe Android.R.drawable .
Vous pouvez utiliser cette fonction pour obtenir un identifiant de ressource:
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)
}
}
Donc si vous voulez obtenir un ID de ressource Drawable, vous pouvez appeler la méthode comme ceci:
getResourseId(MyActivity.this, "myIcon", "drawable", getPackageName());
(ou à partir d'un fragment):
getResourseId(getActivity(), "myIcon", "drawable", getActivity().getPackageName());
Pour un String ID de ressource, vous pouvez l'appeler comme suit:
getResourseId(getActivity(), "myAppName", "string", getActivity().getPackageName());
etc...
Attention : Il lève une exception RuntimeException s'il ne parvient pas à trouver l'ID de ressource. Assurez-vous de bien récupérer en production.
Un autre scénario que j'ai rencontré.
String imageName = "Hello" et ensuite, quand il est passé à la fonction getIdentifier en tant que premier argument, il passera le nom avec une fin de chaîne null et retournera toujours zéro. Passez cette imageName.substring (0, imageName.length () - 1)