viernes, 16 de mayo de 2014

Buscar Id de un recurso por su nombre

En algunas ocasiones nos puede interesar acceder al id de un recurso por su nombre, no por su localización. En muchos casos esto se puede deber a que tenemos el nombre almacenado en una variable o en un array. Cuando sea así una opción sencilla es la siguiente:

getResources().getIdentifier(<nombre del recurso>,<tipo de recurso: string, color, ...)>, <package: this.getPacktageName()>);

Aquí os muestro un ejemplo de la utilidad de este código:

Suponemos que tenemos tres botones, cada uno de ellos con el nombre de un color. Al pulsarlos queremos que cambie el fondo por el del color nombrado.

Para simplificar el código por si hay que añadir más botones, operaciones o hacer otros cambios, llamamos a una clase que haga la operación del cambio del color, enviándole el nombre del color elegido mediante un string.

public void cambiarColor(String colorEnviado)
{
RelativeLayout relativeLayout = (RelativeLayout)findViewById(R.id.layout);
relativeLayout.setBackgroundColor(getResources().getColor(getResources().getIdentifier(colorEnviado, "color", miContexto.getPackageName())));
}

Usando esta función cambiaría el color automáticamente del layout, sin necesidad de poner un "if" o un "case" para realizar una operación para cada color.

Y preguntareis, ¿por qué no hacer esto?:

public void cambiarColor(String colorEnviado)
{
RelativeLayout relativeLayout = (RelativeLayout)findViewById (R.id.layout);
relativeLayout.setBackgroundColor(getResources().getColor (R.color.colorEnviado));
}

La respuesta es porque este código daría error, ya que buscaría el recurso por el nombre de la variable, no por su contenido.

No hay comentarios:

Publicar un comentario