Si j'obtiens le nom de l'image sous forme de variable comme suit:
var imageName = SERVICE.getImg();
Ensuite, comment puis-je obtenir la ressource avec R.drawable.????
, J'ai essayé R.drawable[imageName]
, mais il a échoué. Aucune suggestion?
int id = getResources().getIdentifier(imageName, type, package);
Cela vous donnera l'ID de la ressource que vous recherchez. Avec lui, vous pouvez alors accéder à la ressource à partir de la classe R.
En utilisant uniquement le paramètre name
:
Vous pouvez également inclure les 3 informations dans le paramètre "nom" en utilisant le format suivant: "package:type/image_name"
, Quelque chose comme:
int id = getResources().getIdentifier("com.my.app:drawable/my_image", null, null);
Ceci est utile lorsque vous travaillez avec des composants externes ou des bibliothèques que vous ne pouvez pas, ou ne voulez pas, modifier la façon dont getIdentifier()
est appelée. par exemple: AOSP Launcher
Essaye ça:
int id = getResources().getIdentifier(imageName, "drawable", getPackageName());
Vous avez besoin de réflexion.
Supposons que vous ayez R.drawable.image1, si vous voulez y accéder via le nom de chaîne "image1", ce qui suit devrait fonctionner:
String Name = "image1";
int id = R.drawable.class.getField(Name).getInt(null);
Mais notez qu'il n'obtient que l'identifiant de l'image, vous avez toujours besoin du gonfleur pour en tirer le dessin réel.
Utilisez cette fonction
public static String getResourceString(String name, Context context) {
int nameResourceID = context.getResources().getIdentifier(name,
"string", context.getApplicationInfo().packageName);
if (nameResourceID == 0) {
throw new IllegalArgumentException(
"No resource string found with name " + name);
} else {
return context.getString(nameResourceID);
}
}
Vous pouvez utiliser la méthode getIdentifier qui vous donnera l'ID de ressource par son nom. Vérifiez ce fil pour plus de détails.