El cuadro de diálogo no muestra el botón positivo y negativo

Utilicé AlertDialog para alertar al usuario confirmar eliminar. Comprobar en mi dispositivo (Android 5.1) y mostrar bien

Introduzca aquí la descripción de la imagen

Pero en algún otro dispositivo (también ejecutar Android 5.1), el diálogo perdido botón positivo y negativo.

Introduzca aquí la descripción de la imagen

Comprobé y encontré que los dispositivos pasan este problema tienen una resolución media (960×540, 854×480).

¿Está la resolución relacionada con este problema? Si no, ¿puede decirme la razón y cómo solucionar este problema?

Mi código para el diálogo de visualización:

public static final Dialog yesNoDialog(Context context, String message, DialogInterface.OnClickListener yesAction, DialogInterface.OnClickListener noAction) { AlertDialog.Builder builder = new AlertDialog.Builder(context,R.style.todoDialogLight); builder.setTitle(context.getString(R.string.app_name)) .setMessage(message) .setCancelable(false) .setPositiveButton("YES", yesAction) .setNegativeButton("NO", noAction); return builder.create(); } 

Y styles.xml

  <style name="todoDialogLight" parent="Theme.AppCompat.Light.Dialog"> <!-- Used for the buttons --> <item name="colorAccent">@color/colorPrimaryDark</item> <item name="android:textStyle">bold</item> <!-- Used for the title and text --> <item name="android:textColorPrimary">@color/colorText</item> <!-- Used for the background --> <!-- <item name="android:background">#4CAF50</item>--> <item name="android:fontFamily">sans-serif</item> <item name="android:windowAnimationStyle">@style/RemindDialogAnimation</item> <item name="android:layout_width">@dimen/width_remind_dialog</item> <item name="android:layout_height">wrap_content</item> </style> 

Así que los botones están ahí para mí. Desafortunadamente, eran texto blanco en el fondo blanco. No tiene nada que ver con la resolución, sino más con el tema que elijas. Para solucionar esto, debe establecer el color de texto correcto en su tema de diálogo.

Por ejemplo, en styles.xml add

 <style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert"> <item name="colorPrimary">@color/colorPrimaryDarkBlue</item> </style> 

Y en su actividad agregar

 AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(MyActivity.this, R.style.MyDialogTheme); 

Espero que esto ayude.

La solución de Ali funcionó para mí. Mi código original funcionaba en versiones android anteriores <7. Pero la prueba en mi Pixel dio botones invisibles. He añadido el concepto de estilo detallado por Ali como se muestra a continuación y todo está bien:

  return new AlertDialog.Builder(getActivity(),R.style.MyDialogTheme) .setView(v) .setTitle(R.string.filter_picker_title) .setPositiveButton(android.R.string.ok, // when the user presses the button to select a new number new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Integer markerIndex = mNumberPicker.getValue(); stringFilter=uniqueValues[markerIndex]; sendResult(Activity.RESULT_OK, stringFilter); } }) .create(); 

Es realmente se relacionan con la resolución, no sé exactamente la razón y sólo hacer una condición if else para solucionar este problema.

 public static String getDensity(Context context) { float density = context.getResources().getDisplayMetrics().density; if (density >= 4.0) { return "xxxhdpi"; } if (density >= 3.0) { return "xxhdpi"; } if (density >= 2.0) { return "xhdpi"; } if (density >= 1.5) { return "hdpi"; } if (density >= 1.0) { return "mdpi"; } return "ldpi"; } 

AlertDialog

  public static Dialog yesNoDialog(final Context context, final String message, final DialogInterface.OnClickListener yesAction, final DialogInterface.OnClickListener noAction) { int theme = PreferenceUtil.getThemeSetting(context, PreferenceUtil.PREF_THEME); AlertDialog.Builder builder = null; String density = AppUtil.getDensity(context); if (theme == ThemeUtil.THEME_LIGHT) { if(density.equals("hdpi")){ builder = new AlertDialog.Builder(context); }else{ builder = new AlertDialog.Builder(context, R.style.todoDialogLight); } } else { if(density.equals("hdpi")){ builder = new AlertDialog.Builder(context); }else{ builder = new AlertDialog.Builder(context, R.style.todoDialogDark); } } builder.setTitle(context.getString(R.string.app_name)) .setMessage(message) .setCancelable(false) .setPositiveButton("YES", yesAction) .setNegativeButton("NO", noAction); return builder.create(); } 

Espero que ayude a otros desarrolladores que tienen el mismo problema.

Dialogo de diálogo;

 public void startAlertDialog(String message) { AlertDialog.Builder alertDialog=new AlertDialog.Builder(this); alertDialog.setCancelable(false); LayoutInflater inflater=(LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE); View view=inflater.inflate(R.layout.alertdialoglayout,null); TextViewRagular textViewRagular=(TextViewRagular)view.findViewById(R.id.textviewMessage); textViewRagular.setText(message); alertDialog.setView(view); dialog=alertDialog.create(); dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); dialog.show(); } 
  • Se desactiva el cuadro de diálogo personalizado cuando hago clic fuera de él
  • Cómo configurar el fondo transparente como un cuadro de diálogo personalizado en android
  • Cuadro de diálogo con EditText y Spinner
  • ¿Cómo establecer la posición del diálogo?
  • ShowDialog obsoleta. ¿Cuál es la alternativa?
  • Diálogo personalizado de Android
  • Visualización de alertas en Activity.onCreate (..)
  • Pantallas negras sólidas al llamar a Dialogs en onCreate ()
  • Onclick Listener para el botón Aceptar
  • ¿Cómo actualizar los valores de setMultiChoiceItems en onPrepareDialog?
  • Set timeout Diálogo en android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.