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
- Inhabilitación (atenuación y descoloración) de la animación del cuadro de diálogo
- Cómo agregar el diseño de fondo en el cuadro de diálogo Modal BottomSheet?
- Cuadro de diálogo o formulario donde el usuario puede elegir para introducir detalles o cancelar
- Interrumpe el diálogo enBackPressed ()?
- Diálogo sin bordes de Android
Pero en algún otro dispositivo (también ejecutar Android 5.1), el diálogo perdido botón positivo y negativo.
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>
- Cómo obtener datos de un cuadro de diálogo personalizado
- Problema de diálogo: requestFeature () debe ser llamado antes de agregar contenido
- ¿Cómo puedo crear un diálogo personalizado con dos datepicker?
- Pantalla personalizada con el cuadro de diálogo
- GetOwnerActivity devuelve nulo en el diálogo personalizado
- Android no puede obtener el tamaño de archivo de diálogo
- Diálogo de selección de elección única en android
- Predeterminado Focus y Teclado a EditText en Android AlertDialog
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(); }
- Script de GoogleCloudMessaging PHP siempre devolviendo invalidregistration
- BroadcastReceiver CONNECTIVITY_CHANGE siempre se ejecuta en la primera vez que se inicia la aplicación?