Cambiar el fondo de ProgressDialog

Estoy tratando de cambiar el fondo de un ProgressDialog . Busqué en la red y encontré varias sugerencias (como ¿Cómo eliminar el borde del diálogo? ), Pero no puedo reemplazar el fondo real de ProgressDialog . En su lugar, obtengo otro fondo (amarillo) detrás del diálogo:

Diálogo con estilo

Mi estilo:

  @drawable/panel_background  

El código que lanza el ProgressDialog :

 ProgressDialog dialog = new ProgressDialog(this, R.style.StyledDialog); dialog.setTitle("The title"); dialog.setMessage("The message."); dialog.show(); 

El dibujable es el mismo parche que está incluido en el SDK, acabo de cambiar a color. Agradecería mucho algunos consejos sobre lo que estoy haciendo mal.

El comentario de Aleks G (debajo de la pregunta) apunta en la dirección correcta. La apariencia del diálogo está definida por un estilo diferente ( android:alertDialogStyle ). Pero uno no puede aplicar el estilo directamente a un ProgressDialog . Ahora, ¿cómo obtengo ese fondo amarillo?

Paso 1 : defina un tema que hereda de Theme.Dialog :

  

Allí, puede definir cosas como el color de fondo para toda la ventana (amarillo en la pregunta), colores de fuente, etc. Lo que realmente importa es la definición de android:alertDialogStyle . Este estilo controla la apariencia del área negra en la pregunta.

Paso 2 : defina CustomAlertDialogStyle :

  

Esto establece el área negra de la pregunta en amarillo.

Paso 3 : aplique MyTheme al ProgressDialog , no CustomAlertDialogStyle :

 ProgressDialog dialog = new ProgressDialog(this, R.style.MyTheme); 

Y aquí está el resultado:

Estilo ProgressDialog

El mismo procedimiento funciona con AlertDialog (que es la clase principal de ProgressDialog ).

Puedes probar mi esencia . Básicamente establece un filtro de color en drawable.

 import android.content.Context; import android.graphics.Color; import android.util.AttributeSet; import android.widget.ProgressBar; public class ColoredProgressBar extends ProgressBar { public ColoredProgressBar(Context context) { super(context); if (!isInEditMode()) init(); } public ColoredProgressBar(Context context, AttributeSet attrs) { super(context, attrs); if (!isInEditMode()) init(); } public ColoredProgressBar(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); if (!isInEditMode()) init(); } /** * Changes color. */ private void init() { getIndeterminateDrawable().setColorFilter(Color.BLUE, android.graphics.PorterDuff.Mode.MULTIPLY); } }