¿Cómo configuro programáticamente el degradado de color de fondo en una barra de título personalizada?

Hay muchos tutoriales y preguntas sobre SO que implementan barras de título personalizadas. Sin embargo, en mi barra de título personalizada tengo un degradado personalizado para el fondo y me gustaría saber cómo configurarlo dinámicamente en mi código.

Aquí es donde se llama mi barra de título personalizada:

requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); setContentView(R.layout.foo_layout); getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_bar); 

Y esta es mi custom_title_bar :

    

Como puede ver, este chico define el fondo en el diseño lineal:

     

Lo que me gustaría hacer es establecer esos colores degradados dinámicamente en mi código. No quiero codificarlos en mi archivo XML como lo hacen actualmente.

Estoy abierto a todas las ideas si tienes una forma mejor de configurar un degradado de fondo.

¡¡Gracias de antemano!!

Para hacer esto en el código, creas un GradientDrawable.
La única posibilidad de establecer el ángulo y el color está en el constructor. Si desea cambiar el color o el ángulo, simplemente cree un nuevo GradientDrawable y configúrelo como fondo

  View layout = findViewById(R.id.mainlayout); GradientDrawable gd = new GradientDrawable( GradientDrawable.Orientation.TOP_BOTTOM, new int[] {0xFF616261,0xFF131313}); gd.setCornerRadius(0f); layout.setBackgroundDrawable(gd); 

Para que esto funcione, agregué una identificación a tu LinearLayout principal de la siguiente manera

     

Y para usar esto como para una barra de título personalizada

  getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.custom_title_bar); View title = getWindow().findViewById(R.id.mainlayout); title.setBackgroundDrawable(gd);