¿Establecer un fondo a los botones en un diálogo?
Tengo un diálogo, que funciona muy bien para mí, pero quiero establecer mi fondo para dos botones en este diálogo. La estructura de la misma es bastante complicada, así que no quiero volver a escribirla en un diálogo personalizado. Pero en este caso, ¿hay alguna posibilidad de establecer un fondo (más específicamente, hay una manera de establecer un estilo de los botones positivo / negativo / neutro)?
- Recurso desplegable del atributo personalizado
- Android: rotar recorta las esquinas de la forma
- Android: html en strings.xml
- android.view.InflateException error inflar clase
- LinearLayout no se puede convertir en android.widget.Button
- "Error: no se puede encontrar la variable de símbolo xml" al intentar google analytics
- AndroidManifest.xml con varias etiquetas de aplicación
- Android Studio: Utilizar ImageButton para iniciar una nueva actividad bloquea la aplicación
- ¿Cómo se exportan los elementos extraíbles del vector XML de Android a otro formato?
- El diseño aparece diferente en la disposición gráfica y en el dispositivo real
- El resultado es diferente.
- El botón recortado no recibe la entrada táctil
- Establecer una fuente específica en un styles.xml
Fundamentalmente desea acceder a los botones de diálogo: estos (en el AlertDialog estándar) tienen actualmente ids android.R.id.button1
para positivo, android.R.id.button2
para negativo y android.R.id.button3
para neutral.
Por ejemplo, para configurar la imagen de fondo en el botón neutral puede hacer esto:
Dialog d; // // create your dialog into the variable d // ((Button)d.findViewById(android.R.id.button3)).setBackgroundResource(R.drawable.new_background);
EDIT: esto es si está utilizando un AlertDialog.Builder para crearlo. Por lo que sé, estas asignaciones de botones pueden cambiar en el futuro, así que tenlo en cuenta.
EDIT: El fragmento de código a continuación debe generar algo que se parece a lo que desea. Resulta que tienes que llamar al show ANTES de cambiar el fondo
AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("TEST MESSAGE) .setPositiveButton("YES", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }) .setNegativeButton("NO", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); AlertDialog alert = builder.create(); alert.show(); ((Button)alert.findViewById(android.R.id.button1)).setBackgroundResource(R.drawable.button_border);
En realidad, hay una manera mejor y más fiable de obtener los botones para el Dialog
que el publicado por @Femi.
Puede utilizar el método getButton :
Button positiveButton = yourDialog.getButton(DialogInterface.BUTTON_POSITIVE);
DialogInterface proporciona todas las constantes necesarias:
DialogInterface.BUTTON_POSITIVE DialogInterface.BUTTON_NEUTRAL DialogInterface.BUTTON_NEGATIVE
Por favor, permítanme señalar que esto sería una mala práctica para anular el método show () para dicho problema.
Para encapsular la solución en la creación del propio diálogo, la mejor práctica es tener la personalización de los botones dentro del constructor de diálogo:
class CustomDialog extends AlertDialog { public CustomDialog(final Context context) { super(context); setOnShowListener(new OnShowListener() { @Override public void onShow(DialogInterface dialog) { Button negativeButton = getButton(DialogInterface.BUTTON_NEGATIVE); Button positiveButton = getButton(DialogInterface.BUTTON_POSITIVE); negativeButton.setBackgroundColor(Color.GREEN); positiveButton.setBackgroundColor(Color.RED); } } } }
AlertDialog alert = builder.create(); alert.show(); Button bn = alert.getButton(DialogInterface.BUTTON_NEGATIVE); bn.setBackgroundColor(Color.RED); Button bp = alert.getButton(DialogInterface.BUTTON_POSITIVE); bp.setBackgroundColor(Color.YELLOW);
- Cómo hacer que Android Camera Intent devuelva la imagen a tamaño completo
- Compruebe si RecyclerView es desplazable