Détails d'identification de la ressource Android
Nous utilisons généralement la méthode findViewByid pour obtenir des ressources. Par exemple, nous utilisons souvent de telles instructions dans la méthode OnCreate:
btnchecked = (imageView) findViewByid (r.id.imgCheck);
FindViewByid est un moyen pratique pour nous d'obtenir divers objets de vue dans la mise en page tels que les boutons, les étiquettes, ListView et ImageView. Comme son nom l'indique, il nécessite un paramètre int: ID de ressource.
L'ID de ressource est très utile. Android attribue automatiquement l'ID à chaque ressource située dans le répertoire RES, y compris divers fichiers image et les objets "@ + id" dans le texte XML. Le sous-répertoire de Res est presque toujours fixe, comme ceux que vous pouvez voir à chaque fois: Drawable-xxxx, mise en page, valeurs et peu communs: animation, xml, ligne, couleur.
Les manuels Android vous disent:
res / drawable / est utilisé pour stocker des fichiers d'image;
Res / Layout / est utilisé pour stocker des fichiers de définition de mise en page;
Res / Values / est utilisé pour stocker certaines variables, paramètres et autres fichiers.
C'est tout ce que nous savons déjà. De plus, Android affectera les ID à toutes les ressources du répertoire RES, et ses principaux principes d'allocation sont:
Les fichiers d'image dans Drawable sont toujours un ID de ressource par fichier.
Chaque vue du fichier XML qui utilise Android: id = ”@ + id / xxx” se verra attribuer un ID de ressource inutilisé.
Peut-être que tout le monde ajoutera d'autres règles plus complexes.
Dans l'API ADK, il existe de nombreuses méthodes qui utilisent réellement l'ID de ressource comme paramètre.
Par exemple, méthode GetDrawable:
getResources (). getDrawable (r.drawable.sendsms_bk));
Littéralement, la méthode GetResources renvoie un objet Android.Content.res.resources.
La méthode GetDrawalbe renvoie un objet dessinable, nous savons qu'il s'agit d'une image.
Le paramètre utilisé par la méthode GetDrawable est l'ID de ressource.
Cependant, quels chiffres sont ces ID de ressource int? Ou où ils sont tous placés. Si vous faites suffisamment attention, vous pouvez les trouver dans le fichier R.Java dans le répertoire GEN. Chaque ID entier hexadécimal a un nom d'attribut très OO, ils sont tous finaux statiques publics, et il est recommandé de ne pas les modifier manuellement. Ces ID de ressource sont situées dans différentes hiérarchies de classe. Si vous regardez attentivement, vous trouverez certaines des règles. Par exemple, l'ID de ressource dans la classe Drawable représente en fait le fichier image dans le répertoire Res / Drawable; L'ID de ressource contenu dans la classe de mise en page représente en fait le fichier XML dans le répertoire Res / Layout; L'ID de ressource contenu dans la classe ID représente en fait l'objet widget à l'aide d'Android: id = "@ + id / xxx" dans le fichier xml de mise en page - bien sûr, si vous utilisez "@ + pneu / xxx", une classe appelée pneu sera créée dans R.Java lors de la compilation.
Grâce à la compréhension ci-dessus, nous avons constaté que l'ID de ressource est une variable ou une propriété qui commence par "R." - Parce que tout est défini dans la classe R - cette classe n'est pas la même R que Android.R, et ils ne sont pas au même niveau de package. Le premier définit les ressources du framework Android, telles que: Android.R.Layout.simple_Expandable_List_Item_1, Android.R.Layout.Simple_Expandable_List_Item_2. Avez-vous utilisé ces ressources? Si vous avez le temps, vous pourriez aussi bien essayer. L'autre R est notre propre R, qui définit notre propre ID de ressource. Nous pouvons utiliser des ID de ressource dans R.XXX.YYY orienté objet, et bien sûr, nous pouvons les utiliser directement avec des nombres hexadécimaux.
L'ID de ressource est si important dans Android, nous pouvons donc obtenir la ressource tant que nous obtenons l'ID de ressource. Parce que dans certains cas, nous ne pouvons pas utiliser une constante comme ID de ressource (parce que nous voulons la remplacer par une variable), nous ne pouvons obtenir que dynamiquement l'ID de ressource de deux manières:
1. Réflexion
La réflexion de Java est si puissante que nous y pensons toujours lorsque nous sommes désespérés. Regardons un morceau de code:
try {field field = r.drawable.class.getField (type); int i = field.getInt (new R.Drawable ()); Log.d (tag, i + ""); return i;} catch (exception e) {log.e (tag, e.toString ()); retour r.rawable.unknow;}Le type est une variable, et ses valeurs possibles seront "fermées", "éditer", "icône", etc. Nous utilisons le champ de classe de réflexion de Java pour accéder à un champ sous la classe R.Drawable. En fait, nous savons que le champ sous R.Drawable est l'ID de ressource du fichier image dans le répertoire res.radable-xxxx. Par conséquent, l'exécution du code ci-dessus est en fait pour obtenir l'ID de ressource du fichier d'image correspondant via une chaîne. Par exemple, lorsque la valeur du type est "icône", le code ci-dessus obtiendra l'ID de ressource du fichier image icon.png dans le répertoire res.radable-xxxx et nous le renvoie. Il est naturel pour nous d'afficher l'image dans ImageView via l'ID de ressource.
2. Utilisez la méthode GetIdentifier de la classe de ressources
L'utilisation de la réflexion est toujours un problème. Si vous utilisez la classe Android.Content.res.Resources pour faire la même chose, ce ne sont que deux phrases:
Ressources res = getResources (); return res.getIdentifier (type, "drawable", getPackageName ());
La méthode GetResources provient du contextext (c'est-à-dire la classe d'activité), qui peut renvoyer directement un objet de ressources. La méthode des ressources GetIdentifier peut renvoyer n'importe quel ID de ressource dans R.Java. Bien sûr, vous devez spécifier 3 paramètres: nom de champ, nom de classe et nom de package. Le nom du package partie du nom entièrement qualifié spécifié par le nom du package. Si le nom entièrement qualifié de R est Android.r ou com.Company.r, le nom du package est "Android" ou "com.comPany". GetPackageName est en fait ce.getPackageName (), qui renvoie directement le nom du package de cette classe.
Le nom de classe est la classe à laquelle appartient la ressource. Par exemple, comme nous le savons, plusieurs classes fixes dans la classe R.Java: Drawable, ID, String, Layout, etc., et de nombreux ID de ressource sont définis en dessous.
Le nom de champ est le nom de l'ID de ressource. Par exemple, la définition de l'ID de ressource:
public statique final int del = 0x7f020002;
Del est le nom d'un ID de ressource, et 0x7f020002 est sa valeur hexadécimale.
Avec 3 paramètres, la méthode GetIdentifier peut obtenir l'ID de ressource en comparant les méthodes dynamiques.
Merci d'avoir lu, j'espère que cela peut vous aider. Merci pour votre soutien à ce site!