¿Cómo puedo establecer el orden de los botones positivo y negativo en AlertDialog?

¿Por qué quiero hacer esto es otra discusión por completo, pero tengo que averiguar la mejor manera de hacer que todos mis diálogos de alerta tienen el botón positivo en el lado derecho. Tenga en cuenta que en la versión 3.0 y siguientes los botones aparecen normalmente como Aceptar / Cancelar y en 4.0 y superiores es Cancelar / Aceptar. Quiero forzar mi aplicación a usar Cancelar / OK de la manera más sencilla posible. Tengo un montón de AlertDialogs en la aplicación.

6 Solutions collect form web for “¿Cómo puedo establecer el orden de los botones positivo y negativo en AlertDialog?”

Desafortunadamente, no creo que puedas. Sin embargo, para citar la documentación :

Nota: Sólo puede agregar uno de cada tipo de botón al AlertDialog. Es decir, no puede tener más de un botón "positivo". Esto limita el número de botones posibles a tres: positivo, neutral y negativo. Estos nombres son técnicamente irrelevantes para la funcionalidad real de sus botones, pero debe ayudarle a realizar un seguimiento de qué uno hace qué.

Así que puedes convertir los diferentes botones en lo que quieras. Lo que está viendo aquí es la orden de haber cambiado (ordenar de esta respuesta):

  • En los dispositivos anteriores a ICS, el orden de los botones (de izquierda a derecha) era POSITIVO – NEUTRO – NEGATIVO.
  • En los dispositivos más nuevos que usan ICS, el orden de los botones (de izquierda a derecha) es ahora NEGATIVO – NEUTRO – POSITIVO.

Usted puede intentar comprobar el Build.VERSION y usarlo para decidir qué botón es cuál en tiempo de ejecución.

Esta es mi solución. Es trabajo para mí.

  // Show alertDialog after building AlertDialog alertDialog = createAlertDialog(context); alertDialog.show(); // and find positiveButton and negativeButton Button positiveButton = (Button) alertDialog.findViewById(android.R.id.button1); Button negativeButton = (Button) alertDialog.findViewById(android.R.id.button2); // then get their parent ViewGroup ViewGroup buttonPanelContainer = (ViewGroup) positiveButton.getParent(); int positiveButtonIndex = buttonPanelContainer.indexOfChild(positiveButton); int negativeButtonIndex = buttonPanelContainer.indexOfChild(negativeButton); if (positiveButtonIndex < negativeButtonIndex) { // prepare exchange their index in ViewGroup buttonPanelContainer.removeView(positiveButton); buttonPanelContainer.removeView(negativeButton); buttonPanelContainer.addView(negativeButton, positiveButtonIndex); buttonPanelContainer.addView(positiveButton, negativeButtonIndex); } 

Puede extender AlertDialog.Builder para forzar la orden:

 public class MyDialog extends AlertDialog.Builder { public MyDialog(Context arg0) { super(arg0); } @Override public Builder setPositiveButton(CharSequence text, OnClickListener listener) { if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { return super.setNegativeButton(text, listener); } else { return super.setPositiveButton(text, listener); } } @Override public Builder setNegativeButton(CharSequence text, OnClickListener listener) { if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { return super.setPositiveButton(text, listener); } else { return super.setNegativeButton(text, listener); } } } 

He creado una solución para forzar el orden de botones para cualquier versión de Android en cualquier dispositivo.

La idea es que podamos obtener una lista de los botones de diálogo para que aparezcan en la pantalla y configurar el texto y las acciones en orden que queramos. Garantiza que tendríamos el mismo orden en cualquier dispositivo.

Por favor revise mi repositorio de GitHub

He aquí un ejemplo de cómo crear y mostrar un diálogo:

  new FixedOrderDialogFragment.Builder() .setLeftButtonText(R.string.left) .setCenterButtonText(R.string.center) .setRightButtonText(R.string.right) .setDefaultButton(FixedOrderDialogFragment.BUTTON_RIGHT) .setMessage(R.string.message) .setTitle(R.string.app_name) .create() .show(getSupportFragmentManager(), "DEMO"); 

Tenga en cuenta que la actividad del propietario debe implementar FixedOrderDialogFragment.FixedOrderDialogListener para poder restaurar el estado del diálogo en la recreación de la actividad.

Pensé que podría simplemente establecer el texto para el botón positivo a Cancelar y el negativo a Aceptar, pero resulta que están en orden alfabético.

  • En AlertDialog buttonPanel, los tres botones ordenan por [Neutra] [Negativo] [Positivo]
  • Entonces puede configurar los botones como los siguientes códigos

    Builder.setNeutralButton ("Negativo", oyente);

    Builder.setNegativeButton ("Neutral", oyente);

    Builder.setPositiveButton ("Positivo", oyente);

  • Android: Dialog de diálogo de actividad desaparece inesperadamente
  • Diálogo del selector personalizado
  • Mostrar un diálogo en `Thread.setDefaultUncaughtExceptionHandler`
  • ¿Cómo abrir un cuadro de diálogo para confirmar la eliminación cuando el usuario pulsa larga en el elemento de la lista?
  • AlertDialog con ArrayAdapter no mostrar lista de elementos
  • Cómo obtener clics de botón en fragmento de host del fragmento de diálogo
  • AlertDialog con vista personalizada no "redimensionar"
  • Establecer dinámicamente el contenido personalizado de AlertDialog
  • Android - Estilo AlertDialog
  • ActionBarSherlock no admite cuadros de diálogo de alerta de luz-tema?
  • ¿Cómo puedo limitar el número de caracteres introducidos en un cuadro de diálogo de alerta? EditText
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.