personalizado - tipos de dialogos en android studio
El texto del diálogo de Android 6.0 no aparece (11)
¡Sospecho que terminas mostrando texto blanco sobre un fondo blanco! (Mirando la captura de pantalla, el ícono (i) tampoco se muestra bien, lo que sugiere que se diseñó para mostrarse en un fondo que no sea blanco.
Puede usar el constructor public AlertDialog.Builder (Context context, int themeResId)
para asegurarse de que está usando un tema específico para Theme_Material_Dialog
estilo a su cuadro de diálogo, donde el Theme_Material_Dialog
es probablemente lo que desea.
Actualicé mi teléfono a Android 6.0 y tengo estos 2 problemas con los diálogos:
1) Se muestra el título, pero los mensajes no son para el cuadro de diálogo de alerta (SOLUCIONADO):
new AlertDialog.Builder(context).setTitle("Title").setMessage("Message");
2) También no se muestra el título del fragmento de diálogo personalizado (NO RESUELTO):
getDialog().setTitle("Title");
No hubo tal problema en el lollipop o en versiones anteriores, el problema apareció solo después de actualizar mi teléfono a Marshmallow.
¿Como resolver el problema?
Al usar DialogFragment
necesitas
Añadir estilo
<style name="CustomDialog" parent="@style/Theme.AppCompat.Light.Dialog"> <item name="android:windowNoTitle">false</item> </style>
En tu
DialogFragment
agregagetTheme
public class CustomDialogFragment extends DialogFragment{ public int getTheme() { return R.style.CustomDialogFragment; } . . .
¡Y eso es!
En mi caso, todos los diálogos tenían el mismo color que las fuentes (título y mensaje). Lo que he hecho para corregir este estado fue el cambio del atributo de color en mi tema. Copié el archivo de tema xml en ''res / values-v22'' y configuré un color diferente para marshmallow.
<resources>
<style name="LywCompatTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
<item name="android:textColorPrimary">@android:color/tertiary_text_dark</item>
</style>
</resources>
o solo para diálogos
<resources>
<style name="LywCompatTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
<item name="android:alertDialogTheme">@style/LywAlertDialogStyle</item>
</style>
<style name="LywAlertDialogStyle" parent="Base.Theme.AppCompat.Light.Dialog.Alert">
<item name="android:textColorPrimary">@color/lyw_secondary_text_color</item>
</style>
</resources>
Encontré algunas respuestas que dicen que debes usar lo siguiente en el tema de tu aplicación:
<item name="android:alertDialogTheme">@style/Theme.AppCompat.Light.Dialog.Alert</item>
Si bien eso es correcto, no funcionó en todos los lugares para mí. Finalmente, me di cuenta de que en algunos lugares estaba usando el generador de AlertDialog regular y en otros lugares que estaba usando el generador de soporte. Si está utilizando el soporte AlertDialog, asegúrese de incluir también lo siguiente en su tema:
<item name="alertDialogTheme">@style/Theme.AppCompat.Light.Dialog.Alert</item>
Responda para 2)
, necesitamos llamar a setStyle()
antes de onCreateDialog()
porque el theme
se usa en onCreateDialog()
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
setStyle(STYLE_NORMAL, android.R.style.Theme_Material_Light_Dialog_Alert);
}
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.setTitle(R.string.dialog_title);
return dialog;
}
Simplemente coloque esto en su archivo de estilos dentro de la etiqueta de estilo de Tema base y estará listo
<item name="android:alertDialogTheme">@style/Theme.AppCompat.Light.Dialog.Alert</item>
Tal vez el color de texto principal sea el mismo que el color de fondo del cuadro de diálogo, en ese caso, en el uso de styles.xml (solo un ejemplo):
<style name="AlertDialog" parent="@android:style/Theme.Material.Light.Dialog.Alert">
<item name="android:textColor">#000000</item>
</style>
y en la creación de diálogos:
new AlertDialog.Builder(
new ContextThemeWrapper(getContext(), R.style.AlertDialog))
).setMessage("test");
Traté de solucionar este problema haciendo un estilo propio.
su objeto de diálogo debe ser así y su estilo apuntado a este diálogo se escribirá a continuación
new AlertDialog.Builder(new ContextThemeWrapper(Context, R.style.Dialog))
.setTitle("Title")
.setMessage("Sample Message ...").show();
R.style.Dialog ::
<style name="Dialog">
<item name="android:textColorPrimary">@color/primary_text</item>
<item name="android:textColor">@color/primary_color</item>
</style>
Colores ::
<color name="primary_text">#212121</color>
<color name="primary_color">#2196f3</color>
Finalmente, la salida debería ser algo como esto.
Nota : "android: textColorPrimary" va para el setMessage del diálogo y "android: textColor" va para el setTitle del diálogo; No uso setPositive y setNegative button and listener en mi objeto de diálogo, pero puede verlos en la imagen si lo desea, puede crear su propio objeto de diálogo.
Use el constructor con el tema para Lollipop y versiones de Android más recientes:
Tema oscuro
AlertDialog.Builder builder;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
builder = new AlertDialog.Builder(context, android.R.style.Theme_Material_Dialog_Alert);
} else {
builder = new AlertDialog.Builder(context);
}
Y para el tema Light.
AlertDialog.Builder builder;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
builder = new AlertDialog.Builder(context, android.R.style.Theme_Material_Light_Dialog_Alert);
} else {
builder = new AlertDialog.Builder(context);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the Builder class for convenient dialog construction
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage(R.string.dialog_fire_missiles)
.setPositiveButton(R.string.fire, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// FIRE ZE MISSILES!
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User cancelled the dialog
}
});
// Create the AlertDialog object and return it
return builder.create();
}
Una vez que verifique esta esperanza, esto funcionará .......
new AlertDialog.Builder(context)
.setTitle("Delete entry")
.setMessage("Are you sure you want to delete this entry?")
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// continue with delete
}
})
.setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// do nothing
}
})
.setIcon(android.R.drawable.ic_dialog_alert)
.show();
Espero que esto te ayudará.............