Cómo cambiar programáticamente el color primario en Android L

¿Hay una manera de cambiar programáticamente los colores primarios. Me gustaría hacerlo en código dependiendo de la pantalla / estado de la aplicación.

Actualmente sólo puedo establecer los colores en el tema (estático):

<item name="android:colorPrimary">@color/primary_color</item> <item name="android:colorPrimaryDark">@color/dark_color</item> <item name="android:colorBackground">@android:color/white</item> <item name="android:colorAccent">@color/primary_color</item> <item name="android:colorControlHighlight">@color/primary_color</item> 

Gracias

Por supuesto, puede implementar subclases personalizadas de View que tienen métodos para configurar colores.

También puede definir varios temas con varios esquemas de color.

Las vistas buscan información del tema desde el contexto cuando se crean. Así que para cambiar los estilos aplicados desde un tema tendrá que recrear la jerarquía de vista con un contexto que utiliza el tema correcto.

Una forma de hacerlo, es crear un nuevo ContextThemeWrapper y luego obtener un LayoutInflator que utiliza ese envoltorio de temas, quitar la versión antigua de su diseño y volver a inflar su diseño.

Aproximadamente:

  ContextThemeWrapper themeWrapper = new ContextThemeWrapper(this, R.style.AppThemeWithColorScheme2); LayoutInflater layoutInflater = LayoutInflater.from(themeWrapper); viewContainer.removeAllViews(); layoutInflater.inflate(R.layout.my_layout, viewContainer, true ); 

Si está utilizando la barra de acción, que puede ser un poco más complicado, porque la barra de acción se crea una vez por actividad .

Utilice este código para configurar la barra de herramientas y la barra de estado (color más oscuro de la barra de herramientas)

 toolbar.setBackgroundColor(toolbarColor); factor=0.8f; int a = Color.alpha(toolbarcolor); int r = Math.round(Color.red(toolbarcolor) * factor); int g = Math.round(Color.green(toolbarcolor) * factor); int b = Math.round(Color.blue(toolbarcolor) * factor); int statusColor=Color.argb(a, Math.min(r, 255), Math.min(g, 255), Math.min(b, 255)); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Window window = MainActivity.this.getWindow(); window.setStatusBarColor(statusColor); } 
  • Hoja inferior no aparece a veces en vista complicada
  • Cómo configurar una pestaña específica al abrir una actividad de Layout de pestaña deslizante?
  • Cómo cambiar el diseño de android biblioteca de soporte FAB Button color de la frontera?
  • Chips componente en la biblioteca de soporte de Android?
  • Diseño de material de Android
  • No tengo una carpeta separada llamada valores v21
  • Android Theme.AppCompat.Light con Dark Toolbar (para texto claro)
  • Switch vs. SwitchCompat
  • ¿Cómo eliminar el retraso al abrir una actividad con un DrawerLayout?
  • Cómo personalizar la barra de acciones contextuales utilizando appCompat en el diseño de materiales
  • CollapsingToolbarLayout con tablayout & image colapsando con la barra de herramientas pegajosa
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.