Texto de diálogo de Android 6.0 no aparece
He actualizado mi teléfono a Android 6.0 y tengo estos 2 problemas con diálogos:
1) Se muestra el título, pero los mensajes no son para el diálogo de alerta (SOLVED):
- Forzar al usuario a seleccionar la opción en el diálogo
- ¿Por qué DialogFragment no puede ser una clase interna?
- Gestionar la actividad desde DialogFragment
- Cómo ejecutar la acción después de pulsar el botón positivo de DialogFragment
- Cómo hacer que este fragmento de diálogo simple semi-transparente
new AlertDialog.Builder(context).setTitle("Title").setMessage("Message");
2) También el título del fragmento de diálogo personalizado no se muestra (NO SOLUCIONADO):
getDialog().setTitle("Title");
No había tal problema en pirulí o en versiones anteriores, el problema apareció sólo después de actualizar mi teléfono a la malvavisco.
¿Como resolver el problema?
- Pasar argumento a DialogFragment
- Disposición de esquina redonda de Android en el cuadro de diálogo
- Mostrar DialogFragment de otro DialogFragment
- Pantalla completa DialogFragment en Android
- Llamar el show de DialogFragment () desde dentro onRequestPermissionsResult () provoca IllegalStateException en Marshmallow
- Cómo mostrar un DialogFragment de un controlador
- Reemplazar el fondo del botón de Android DialogFragment
- No puede obtener DialogFragment para descartar programatically
Utilice el constructor con el tema para Lollipop y versiones más nuevas de android:
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 de la Luz
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); }
He encontrado algunas respuestas que dicen que debes utilizar lo siguiente en el tema de tu aplicación:
<item name="android:alertDialogTheme">@style/Theme.AppCompat.Light.Dialog.Alert</item>
Aunque eso es correcto, no funcionaba en todos los lugares para mí. Eventualmente, me di cuenta de que en algunos lugares estaba usando el constructor regular AlertDialog y en otros lugares estaba usando el constructor 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>
Apenas ponga esto en su archivo de los estilos dentro de su etiqueta del estilo del tema bajo y usted es bueno ir
<item name="android:alertDialogTheme">@style/Theme.AppCompat.Light.Dialog.Alert</item>
Respuesta para 2)
, tenemos que llamar a setStyle()
antes onCreateDialog()
porque el theme
se utiliza 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; }
Traté de solucionar este problema haciendo un estilo propio.
Su objeto de diálogo debe ser así y su estilo señalado a este cuadro de 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 debe ser algo como esto
Nota : "android: textColorPrimary" va para el cuadro de diálogo setMessage y "android: textColor" va para el cuadro de diálogo setTitle; No utilizo setPositive y setNegative botón y oyente en mi objeto de diálogo, pero se puede ver en la imagen si desea puede hacer su propio objeto de diálogo.
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á………….
¡Sospecho que usted está terminando encima de mostrar el texto blanco en un fondo blanco! (Mirando la captura de pantalla, el ícono (i) no se muestra bien tampoco, lo que sugiere que fue diseñado para ser mostrado en un fondo distinto de blanco.
Puede utilizar el constructor public AlertDialog.Builder (Context context, int themeResId)
para asegurarse de que está utilizando un tema específico para Theme_Material_Dialog
su diálogo, donde el Theme_Material_Dialog
es probablemente lo que desea.
Tal vez el color del texto principal sea el mismo que el color de fondo del diálogo, en ese caso en el uso de styles.xml (sólo 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 del diálogo:
new AlertDialog.Builder( new ContextThemeWrapper(getContext(), R.style.AlertDialog)) ).setMessage("test");
@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 comprobar esta esperanza esto funcionará …….
En mi caso todos los diálogos tenían el mismo color que las fuentes (título y mensaje). Lo que he hecho para arreglar este estado fue el cambio del atributo de color en mi tema. Copié el archivo del tema del xml en el `res / values-v22 'y fijo el color diferente para el malvavisco.
<resources> <style name="LywCompatTheme" parent="@style/Theme.AppCompat.Light.NoActionBar"> <item name="android:textColorPrimary">@android:color/tertiary_text_dark</item> </style> </resources>
O sólo 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>
Cuando utilice DialogFragment necesita
-
Añadir estilo
<style name="CustomDialog" parent="@style/Theme.AppCompat.Light.Dialog"> <item name="android:windowNoTitle">false</item> </style>
-
En tu DialogFragment agrega getTheme
public class CustomDialogFragment extends DialogFragment{ public int getTheme() { return R.style.CustomDialogFragment; } . . .
¡Y eso es! La esperanza ayuda.