Cambiar hexadecimal de colors.xml android studio

publicado por: Anonymous

Tengo una actividad en la cual necesito cambiar el color a varios elementos, por lo cual hacerlo uno por uno puede resultar un poco tedioso. Estos elementos comparten un denominador común que es el color desde el recurso correspondiente.

¿Es posible cambiar el valor de dicho recurso mediante programación?

Por ejemplo, hacer que:

<color name="colorTitle">#212121</color>

luego tome otro valor hexadecimal y este aplique a todos los elementos que tienen colorTitle.

solución

Los resources como R.colors son generados en tiempo de compilación como constantes por lo que no podrás cambiarlos en tiempo de ejecucion. Lo que puedes hacer es crear una funcion que retorne el color que deseas y que todas las vistas que requieran cambiar el color dinamicamente lo obtengan por medio al metodo.

Por ejemplo.
Crea una clase Activity base para toda tu aplicación que contenga el siguiente metodo:

public ActivityBase extends AppCompactActivity
{

  private boolean colorClaro = false;

  public int obtenerColorDinamico()
  {
       if(colorClaro)
       {
          return super.getColor(R.colors.color_claro);
       }
       else{
          return super.getColor(R.colors.color_oscuro);
       }
  }
}

Entonces siempre que una vista requiera que el color cambie, entonces solo le asignas el resultado de la funcion, por ejemplo aun TextView:

public class HomeActivity extends ActivityBase
{
    public void onCreate(Bundle instance)
    {
        setContentView(R.layout.layout_activity);

        myTextView.setTextColor(obtenerColorDinamico());
        //...
    }
}

En el ejemplo, el color de los TextView estan en base al estado de la variable colorClaro, si esta cambiase, cuando cargue la vista de nuevo cambiaran todos los elementos que obtenga el color de la funcion.

El estado que decidirá si tomar un color o el otro lo pudieras guardar en un SharePreferences o base datos o según tu elijas.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *