2010-10-22 24 views
8

Así que veo que podemos tener alertas de diálogo con colores de fondo gris y blanco (cuando setinverso ...).Android - Custom AlertDialog Color de fondo

Para saber por qué revisé themes.xml del sdk, verificándolo me llevó a dibujar y allí me di cuenta de que el fondo del cuadro de alerta no se realiza programáticamente sino a través de algunas imágenes. Y estas imágenes garantizan que hay dos líneas horizontales grises (o blancas cuando el color es inverso) en la parte superior (área de título) y en la parte inferior (justo encima del área del botón) cuando usamos LayoutInflater para establecer un color de fondo diferente.

Así que mi pregunta es, como LayoutInflator es inútil y supongo que tengo que subclase alertdialog, ¿qué sugieres que haga para generar un AlertDialog con un backgroundcolor diferente? ¿Qué debería anular?

Respuesta

17

En lugar de usar AlertDialog, terminé usando un Diálogo. Para obtener una apariencia personalizada:

1-Crear el diálogo y eliminar el área del título (De lo contrario obtendrá un área gris en blanco en la parte superior):

myDialog = new Dialog(this); 
myDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 

2-crear un diseño en XML, y establecer como contenidos de diálogo:

myDialog.setContentView(R.layout.mydialog_layout); 

3-Si el diseño no es un rect redondeada, se cruzan con las esquinas redondeadas del cuadro de diálogo. Por lo tanto, el diseño de la disposición como un rect redondeada:

en mydialog_layout.xml:

android:background = "@layout/mydialog_shape" 

mydialog_shape.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" 
    > 
    <gradient android:startColor="#FF0E2E57" 
    android:endColor="#FF0E2E57" 
      android:angle="225" android:paddingLeft="20dip"/> 

    <corners android:bottomRightRadius="5dp" android:bottomLeftRadius="5dp" 
    android:topLeftRadius="5dp" android:topRightRadius="5dp" android:paddingLeft="20dip"/> 
</shape> 

4-Añadir oyentes a los botones de su actividad:

Button button = (Button)myDialog.findViewById(R.id.dialogcancelbutton); 
button.setOnClickListener(new OnClickListener() { 
@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    myDialog.cancel(); 
}}); 

Eso es todo.

+0

¿Qué pasa con el 'yasalUyariDialog'? la sección de arriba? Parece un poco aleatorio? –

+0

sí, lo siento mucho. Fijo –

+0

También puede hacerlo con alerta ... solo tiene que inflar el diseño primero con layoutinflator y luego es el mismo, pero es más fácil asignar un icono y título. – trgraglia

0

Recuerdo leer que no todos los cuadros de diálogo de Android se crean por igual. Por lo tanto, si no desea utilizar el cuadro de diálogo que se incluye con la versión de Android del dispositivo; Necesita codificar un diálogo completamente nuevo desde cero.

Editar:

creo que necesitas para anular el onCreateDialog con una clase constructor de diálogo personalizado. Como dije, nunca lo hice. Recuerde, para mantener el estilo de Android MVC, también debe definir el diálogo en XML. Si fuera a hacerlo; Probablemente comenzaría con el diseño XML, luego codificaría una clase de diálogo personalizada usando los mismos métodos que una clase normal de generador de diálogo. Lamento ser tan vago, todavía estoy aprendiendo Java y Android.

+0

+1 Thx por la respuesta. Entonces, ¿qué métodos debo anular para obtener un cuadro de diálogo personalizado funcional? –