web-dev-qa-db-fra.com

Comment puis-je obtenir l'ID de ressource d'une image si je connais son nom?

Comment obtenir l'ID de ressource d'une image si je connais son nom (sous Android)?

131
manu

Avec quelque chose comme ça:

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

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.

Lien: Récupération dynamique de ressources dans Android

28
VSB

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");

alert

Une autre méthode consiste à consulter la documentation de la classe Android.R.drawable .

10
naXa

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.

Lire ceci

10
Azhar

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)

0
sunil shah