Je veux accéder à une ressource comme un String ou un Drawable par son nom et non par son id int.
Quelle méthode dois-je utiliser pour cela ?
Je veux accéder à une ressource comme un String ou un Drawable par son nom et non par son id int.
Quelle méthode dois-je utiliser pour cela ?
Si j'ai bien compris, c'est ce que vous voulez.
int drawableResourceId = this.getResources().getIdentifier("nameOfDrawable", "drawable", this.getPackageName());
Où "ceci" est une activité, écrite juste pour clarifier.
Si vous voulez un String dans strings.xml ou un identifiant d'un élément d'interface utilisateur, remplacez "drawable" par "drawable".
int resourceId = this.getResources().getIdentifier("nameOfResource", "id", this.getPackageName());
Je vous préviens, cette façon d'obtenir des identifiants est vraiment lente, à n'utiliser qu'en cas de besoin.
Lien vers la documentation officielle : Resources.getIdentifier(String name, String defType, String defPackage)
Ceci est très utile dans le contexte de l'écriture de tests pour s'assurer de l'existence de certaines chaînes de caractères, etc.
Je ne sais pas mec, j'ai ajouté un Log avant et après getIdentifier() avec le timestamp et il m'a montré qu'il est exécuté en 0 - 1 ms ! Donc ce n'est pas lent, c'est super rapide ! Je l'utilise pour récupérer des images à partir de ressources et cela fonctionne parfaitement. Testé sur Nexus5x.
@KirillKarmazin : Le Nexus5X est un téléphone décemment rapide, et 1ms pour un tel appel est assez lent. N'oubliez pas que chaque trame de l'interface utilisateur ne dure que 16 ms.
Ce sera quelque chose comme :
R.drawable.resourcename
Assurez-vous que vous n'avez pas le Android.R
importé, car cela peut perturber Eclipse (si c'est ce que vous utilisez).
Si cela ne fonctionne pas, vous pouvez toujours utiliser la fonction getResources
méthode ...
Drawable resImg = this.context.getResources().getDrawable(R.drawable.resource);
Donde this.context
est initialisé comme un Activity
, Service
ou tout autre Context
sous-classe.
Mise à jour :
Si c'est le nom que vous voulez, le bouton Resources
(renvoyée par getResources()
) a un getResourceName(int)
et une méthode getResourceTypeName(int)
?
Mise à jour 2 :
Le site Resources
possède cette méthode :
public int getIdentifier (String name, String defType, String defPackage)
Qui renvoie l'entier du nom de la ressource, du type et du paquet spécifiés.
Merci pour votre réponse .R.drawable.resourcename que j'utilise maintenant j'ai besoin d'obtenir sa valeur entière en passant resourcename.
Ce que vous avez dit, c'est qu'il y a un moyen d'accéder à la valeur de la ressource R.drawable.resource en passant la ressource.
Kotlin Version
via Extension Function
Pour trouver un identifiant de ressource par son nom en Kotlin, ajoutez le snippet ci-dessous dans un fichier kotlin :
Fonctions d'extension.kt
import android.content.Context
import android.content.res.Resources
fun Context.resIdByName(resIdName: String?, resType: String): Int {
resIdName?.let {
return resources.getIdentifier(it, resType, packageName)
}
throw Resources.NotFoundException()
}
Usage
Maintenant, tous les identifiants de ressources sont accessibles partout où vous avez une référence de contexte en utilisant resIdByName
méthode :
val drawableResId = context.resIdByName("ic_edit_black_24dp", "drawable")
val stringResId = context.resIdByName("title_home", "string")
.
.
.
Un moyen simple d'obtenir l'ID d'une ressource à partir d'une chaîne de caractères. Ici, resourceName est le nom de la ressource ImageView dans le dossier drawable qui est également inclus dans le fichier XML.
int resID = getResources().getIdentifier(resourceName, "id", getPackageName());
ImageView im = (ImageView) findViewById(resID);
Context context = im.getContext();
int id = context.getResources().getIdentifier(resourceName, "drawable",
context.getPackageName());
im.setImageResource(id);
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
2 votes
Duplicata possible de Comment puis-je obtenir l'identifiant de ressource d'une image si je connais son nom ?