Detalles de ID de recursos de Android
Por lo general, usamos el método FindViewByID para obtener recursos. Por ejemplo, a menudo usamos tales declaraciones en el método OnCreate:
btnchecked = (imageView) findViewByid (r.id.imgcheck);
FindViewById es una forma conveniente para obtener varios objetos de vista en el diseño, como botones, etiquetas, listview e imageView. Como su nombre lo indica, requiere un parámetro int: ID de recurso.
La identificación de recursos es muy útil. Android asigna automáticamente ID a cada recurso ubicado en el directorio RES, incluidos varios archivos de imagen y objetos "@+id" en el texto XML. El subdirectorio de RES casi siempre se fija, como los que puede ver cada vez: Drawable-XXXX, Diseño, valores y poco comunes: Anim, XML, fila, color.
Los libros de texto de Android te dicen:
Res/ Drawable/ se usa para almacenar archivos de imagen;
res/ diseño/ se usa para almacenar archivos de definición de diseño;
Res/ Values/ se usa para almacenar algunas variables, parámetros y otros archivos.
Esto es todo lo que ya sabemos. Además, Android asignará IDS a todos los recursos en el directorio de RES, y sus principios principales de asignación son:
Los archivos de imagen en Drawable son siempre una ID de recurso por archivo.
A cada vista en el archivo XML que usa Android: id = ”@+id/xxx” se le asignará una ID de recurso no utilizada.
Tal vez todos agregan otras reglas más complejas.
En la API de ADK, hay muchos métodos que realmente usan la ID de recursos como parámetro.
Por ejemplo, el método getDrawable:
getResources (). getDrawable (r.drawable.sendsms_bk));
Literalmente, el método GetResources devuelve un objeto android.content.res.resources.
El método GetDrawalbe devuelve un objeto dibujable, sabemos que esta es una imagen.
El parámetro utilizado por el método GetDrawable es la ID de recursos.
Sin embargo, ¿qué números son estos ID de recursos int? O donde se colocan todos. Si es lo suficientemente cuidadoso, puede encontrarlos en el archivo r.java en el directorio Gen. Cada ID de entero hexadecimal tiene un nombre de atributo muy OO, todos son estáticos públicos finales y se recomienda que no los modifique manualmente. Estas ID de recursos se encuentran en diferentes jerarquías de clase. Si mira con cuidado, encontrará algunas de las reglas. Por ejemplo, la ID de recurso en la clase Drawable en realidad representa el archivo de imagen en el directorio Res/Drawable; La ID de recursos contenida en la clase de diseño en realidad representa el archivo XML en el directorio de res/diseño; La ID de recurso contenida en la clase ID en realidad representa el objeto Widget usando Android: id = "@+id/xxx" En el archivo XML de diseño, por supuesto, si usa "@+neumático/xxx", se creará una clase llamada neumática en R.Java cuando se compara.
A través de la comprensión anterior, encontramos que la identificación de recursos es una variable o propiedad que comienza con "R." - Debido a que todo está definido en la clase R, esta clase no es la misma R que Android.r, y no están en el mismo nivel de paquete. El primero define los recursos del marco de Android, como: Android.R.Layout.Simple_ExPandable_List_Item_1, android.R.Layout.Simple_ExPandable_list_item_2. ¿Has utilizado estos recursos? Si tiene tiempo, también podría probarlo. El otro R es nuestro propio R, que define nuestra propia identificación de recursos. Podemos usar ID de recursos en R.xxx.yy orientado a objetos, y por supuesto podemos usarlos directamente con números hexadecimales.
La ID de recursos es muy importante en Android, por lo que podemos obtener el recurso siempre que obtengamos la ID de recursos. Porque en algunos casos, no podemos usar una constante como ID de recurso (porque queremos reemplazarla con una variable), solo podemos obtener dinámicamente la ID de recursos de dos maneras:
1. Reflexión
La reflexión de Java es tan poderosa que siempre lo pensamos cuando estamos desesperados. Veamos un código:
intente {campo campo = r.drawable.class.getfield (type); int i = field.getInt (new R.Drawable ()); Log.d (etiqueta, i+""); return i;} capt (excepción e) {log.e (tag, e.ToString ()); return r.drawable.unknow;}El tipo es una variable, y sus posibles valores serán "cerrados", "editar", "icono", etc. Usamos el campo de clase de reflexión de Java para acceder a un campo debajo de la clase R.Drawable. De hecho, sabemos que el campo bajo R.Drawable es la ID de recurso del archivo de imagen en el directorio res.Drawable-XXXX. Por lo tanto, ejecutar el código anterior es realmente obtener la ID de recurso del archivo de imagen correspondiente a través de una cadena. Por ejemplo, cuando el valor de tipo es "icono", el código anterior obtendrá la ID de recurso del archivo de imagen icon.png en el directorio res.drawable-xxxx y nos lo devolverá. Es natural para nosotros mostrar la imagen en ImageView a través de la ID de recursos.
2. Use el método GetIndident de la clase de recursos
Usar reflexión sigue siendo una molestia. Si usa la clase android.content.res.resources para hacer lo mismo, son solo dos oraciones:
Recursos res = getResources (); return res.getIdentifier (tipo, "Drawable", getPackageName ());
El método GetResources proviene del contexto (es decir, la clase de actividad), que puede devolver directamente un objeto de recursos. El método de recursos GetIndentifier puede devolver cualquier identificación de recursos en R.Java. Por supuesto, debe especificar 3 parámetros: nombre de campo, nombre de clase y nombre del paquete. El nombre del paquete parte del nombre completamente calificado especificado por el nombre del paquete. Si el nombre totalmente calificado de R es Android.r o Com.comPany.r, el nombre del paquete es "Android" o "Com.Com.pany". getPackageName es en realidad este.getPackageName (), que devuelve directamente el nombre del paquete de esta clase.
El nombre de la clase es la clase a la que pertenece el recurso. Por ejemplo, como sabemos, varias clases fijas en la clase R.Java: Drawable, ID, Cadena, Diseño, etc., y muchas ID de recursos se definen debajo de ellas.
El nombre del campo es el nombre de la ID de recursos. Por ejemplo, la definición de identificación de recursos:
Public static final int del = 0x7f020002;
Del es el nombre de una ID de recurso, y 0x7F020002 es su valor hexadecimal.
Con 3 parámetros, el método GetIdentifier puede obtener la ID de recursos comparando métodos dinámicos.
Gracias por leer, espero que pueda ayudarte. ¡Gracias por su apoyo para este sitio!