Android, ¿obtienes el ID de recurso de la cadena?
Necesito pasar un ID de recurso a un método en una de mis clases. Necesita usar tanto la identificación a la que apunta la referencia como también la cadena. ¿Cuál es la mejor manera de lograr esto?
Por ejemplo:
R.drawable.icon
Necesito obtener el ID entero de esto, pero también necesito acceso a la cadena "icono".
Sería preferible si todo lo que tuviera que pasar al método fuera la cadena del "icono".
@EboMike: No sabía que eso Resources.getIdentifier()
existía.
En mis proyectos utilicé el siguiente código para hacer eso:
public static int getResId(String resName, Class<?> c) {
try {
Field idField = c.getDeclaredField(resName);
return idField.getInt(idField);
} catch (Exception e) {
e.printStackTrace();
return -1;
}
}
Se usaría así para obtener el valor del R.drawable.icon
valor entero del recurso.
int resID = getResId("icon", R.drawable.class); // or other resource class
Acabo de encontrar una publicación de blog que dice que Resources.getIdentifier()
es más lento que usar la reflexión como lo hice yo. Échale un vistazo .
ADVERTENCIA : esta solución fallará en la versión de lanzamiento si la reducción de código/recursos está habilitada como lo sugiere Google: https://developer.android.com/build/shrink-code
Además, puede fallar en otros casos, por ejemplo, cuando tendrá <string name="string.name">…</string>
el nombre del campo real string_name
y no elstring.name
Puede utilizar esta función para obtener el ID del recurso.
public static int getResourceId(String pVariableName, String pResourcename, String pPackageName)
{
try {
return getResources().getIdentifier(pVariableName, pResourcename, pPackageName);
} catch (Exception e) {
e.printStackTrace();
return -1;
}
}
Entonces, si desea obtener una función de llamada dibujable como esta
getResourceId("myIcon", "drawable", getPackageName());
y para cadena puedes llamarlo así
getResourceId("myAppName", "string", getPackageName());
Lee esto