Me preguntaba si alguien podría ayudarme. Estoy tratando de crear un AlertDialog personalizado. Para hacer esto, agregué la siguiente línea de código en styles.xml
<resources>
<style name="CustomAlertDialog" parent="android:Theme.Dialog.Alert">
<item name="android:windowBackground">@drawable/color_panel_background</item>
</style>
</resources>
- color_panel_background.9.png se encuentra en la carpeta dibujable. Esto también está disponible en la carpeta de Android SDK res.
La siguiente es la actividad principal.
package com.customdialog;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
public class CustomDialog extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.setTheme(R.style.CustomAlertDialog);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("HELLO!");
builder .setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//MyActivity.this.finish();
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//dialog.cancel();
}
});
AlertDialog alertdialog = builder.create();
alertdialog.show();
}
}
Para aplicar el tema a un AlertDialog, tuve que establecer el tema en el contexto actual.
Sin embargo, parece que no puedo hacer que la aplicación muestre AlertDialog personalizado. ¿Puede alguien ayudarme con esto?
Respuestas:
En Dialog.java (Android src) se usa un ContextThemeWrapper. Entonces podría copiar la idea y hacer algo como:
AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(this, R.style.AlertDialogCustom));
Y luego dale el estilo que quieras:
fuente
@android:style/Theme.Dialog
público? ¿Se puede usar en su lugar?Theme.AppCompat.Light.Dialog.Alert
estilo como padre de su estilo personalizado. Pero, si haces esto, asegúrate de importarimport android.support.v7.app.AlertDialog;
y noimport android.app.AlertDialog
Estaba teniendo este
AlertDialog
problema relacionado con el tema usando sdk 1.6 como se describe aquí: http://markmail.org/message/mj5ut56irkrkc4nrResolví el problema haciendo lo siguiente:
Espero que esto ayude.
fuente
He escrito un artículo en mi blog sobre cómo configurar el diseño de un AlertDialog con archivos de estilo XML. El principal problema es que necesita diferentes definiciones de estilo para diferentes parámetros de diseño. Aquí hay un resumen basado en el estilo AlertDialog de Holo Light Platform versión 19 para un archivo de estilo que debe cubrir un montón de aspectos de diseño estándar como tamaños de texto y colores de fondo.
fuente
fuente
Estaba luchando con esto: puede diseñar el fondo del diálogo utilizando
android:alertDialogStyle="@style/AlertDialog"
su tema, pero ignora cualquier configuración de texto que tenga. Como @rflexor dijo anteriormente, no se puede hacer con el SDK antes de Honeycomb (bueno, podría usarloReflection
).Mi solución, en pocas palabras, fue diseñar el fondo del diálogo usando lo anterior, luego establecer un título personalizado y una vista de contenido (usando diseños que sean los mismos que en el SDK).
Mi envoltura:
alert_dialog_title.xml (tomado del SDK)
alert_dialog_message.xml
Luego, solo use en
CustomAlertDialogBuilder
lugar deAlertDialog.Builder
crear sus cuadros de diálogo, y simplemente llamesetTitle
ysetMessage
como de costumbre.fuente
Puede asignar un tema directamente cuando inicia el Generador:
Luego personaliza tu tema en tu
values/styles.xml
fuente
Theme.AppCompat.Light.Dialog.Alert
Para cuadros de diálogo personalizados:
simplemente llame en
super(context,R.style.<dialog style>)
lugar desuper(context)
en el constructor de diálogoPara AlertDialog:
Simplemente cree alertDialog con este constructor:
fuente
Supongo que no se puede hacer. Al menos no con el constructor. Estoy trabajando con 1.6 y la implementación en Builder.create () es:
que llama al constructor "no consciente del tema" de AlertDialog, que se ve así:
Hay un segundo constructor en AlertDialog para cambiar temas:
que el constructor simplemente no llama.
Si el Diálogo es bastante genérico de todos modos, intentaría escribir una subclase de AlertDialog, llamando al segundo constructor y usaría esa clase en lugar del mecanismo Builder.
fuente
Una mejor manera de hacer esto es usar un cuadro de diálogo personalizado y personalizarlo de acuerdo a sus necesidades aquí es un ejemplo de cuadro de diálogo personalizado .....
}
Aquí está el diseño xml
fuente
Cualquiera que intente hacer esto dentro de un Fragmento (usando la biblioteca de soporte, es decir, antes de la API 11) debería ir con esto:
@Rflexor me dio un empujón para extender AlertDialog y exponer al constructor gracias
fuente
AlertDialog.Builder(Context, int)
solo funciona en API 11 y superior. Su código se bloqueará en versiones anteriores de Android.La solución de Arve Waltin se ve bien, aunque todavía no la he probado. Hay otra solución en caso de tener problemas para conseguir que el trabajo .... Extender
AlertDialog.Builder
y reemplazar todos los métodos (por ejemplo.setText
,setTitle
,setView
, Etc) no establecer el actual texto / título / punto de vista de diálogo, sino para crear una nueva vista dentro de la Vista del diálogo hace todo lo que está allí. Entonces eres libre de diseñar todo lo que quieras.Para aclarar, en lo que respecta a la clase padre, se establece la Vista y nada más.
En lo que respecta a su clase extendida personalizada, todo se hace dentro de esa vista.
fuente
No estoy seguro de cómo funcionaría la solución de Arve en un cuadro de diálogo personalizado con el generador donde la vista se infla a través de un LayoutInflator.
La solución debe ser insertar el ContextThemeWrapper en el inflador a través de
cloneInContext()
:fuente
Se puede hacer simplemente usando setView () del generador. Puede crear cualquier vista de su elección y alimentar el generador. Esto funciona bien Yo uso un TextView personalizado que es representado por el generador de diálogo. No configuro el mensaje y este espacio se utiliza para representar mi vista de texto personalizada.
fuente
fuente