Android: cree una ventana emergente que tenga múltiples opciones de selección

109

He estado buscando tratando de descubrir cómo crear una ventana emergente o un cuadro de diálogo que tenga 4 opciones para elegir.

Veo esta imagen en el sitio para desarrolladores de Android:

ingrese la descripción de la imagen aquí

¿Alguien sabe cómo codificar algo como el de la derecha? No necesito ningún ícono al lado de mi texto, solo necesito poder seleccionar entre 4 opciones.

Cornomaníaco
fuente

Respuestas:

289

Puede crear una Stringmatriz con las opciones que desea mostrar allí y luego pasar la matriz a una AlertDialog.Buildercon el método setItems(CharSequence[], DialogInterface.OnClickListener).

Un ejemplo:

String[] colors = {"red", "green", "blue", "black"};

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Pick a color");
builder.setItems(colors, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // the user clicked on colors[which]
    }
});
builder.show();

La salida (en Android 4.0.3):

Salida

(Mapa de fondo no incluido.;))

zbr
fuente
5
.create()no es necesario aquí, .show()devolverá el diálogo creado por el constructor y luego lo mostrará también
TronicZomB
2
Muchas gracias por esto. Realmente no quería implementar un diseño xml para un menú de texto simple y no pude encontrar una manera fácil de hacerlo hasta que me encontré con esta publicación.
Christopher Rathgeb
¿Cómo podemos colocar estos textos en el medio y establecer el color dentro de este texto? por ejemplo, el rojo muestra el color rojo. el texto verde se muestra en color verde?
Ahmad Arslan
Nota: este ejemplo no es múltiple, vuelva a leer el título de la publicación :)
Hola, ¿puedes mostrar también cómo puedo establecer acciones para selecciones de elementos específicos? Ejemplo: quiero permitir que el usuario cambie el idioma de la aplicación haciendo clic en uno de esos elementos (probablemente usando la declaración if).
Arda Çebi
6

Las ventanas emergentes no son más que AlertDialog. Así que solo necesita crear AlertDialog, luego inflar la vista deseada usando LayoutInflatery configurar la vista inflada usando el setView()método deAlertDialog

Vishal Pawale
fuente
4

Prueba esto :

public void onClick(View v) {

    final String[] fonts = {
        "Small", "Medium", "Large", "Huge"
    };

    AlertDialog.Builder builder = new AlertDialog.Builder(TopicDetails.this);
    builder.setTitle("Select a text size");
    builder.setItems(fonts, new DialogInterface.OnClickListener() {@
        Override
        public void onClick(DialogInterface dialog, int which) {
            if ("Small".equals(fonts[which])) {
                Toast.makeText(TopicDetails.this, "you nailed it", Toast.LENGTH_SHORT).show();
            } else if ("Medium".equals(fonts[which])) {
                Toast.makeText(TopicDetails.this, "you cracked it", Toast.LENGTH_SHORT).show();
            } else if ("Large".equals(fonts[which])) {
                Toast.makeText(TopicDetails.this, "you hacked it", Toast.LENGTH_SHORT).show();
            } else if ("Huge".equals(fonts[which])) {
                Toast.makeText(TopicDetails.this, "you digged it", Toast.LENGTH_SHORT).show();
            }
            // the user clicked on colors[which]

        }
    });
    builder.show();
}
Nikhil jassal
fuente
Creo que switch (fuente [cuál]) lo está haciendo.
3

OPCIÓN ALTERNATIVA

Esta es mi primera publicación, ¡así que estoy emocionado de compartir mi código! Esto funcionó para mí:

Coloque estas dos líneas encima del evento OnCreate

final String[] Options = {"Red", "Blue"};
AlertDialog.Builder window;

Coloque este código en el evento que activará este

window = new AlertDialog.Builder(this);
window.setTitle("Pick a color");
window.setItems(Options, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        if(which == 0){
           //first option clicked, do this...

        }else if(which == 1){
           //second option clicked, do this...

        }else{
        //theres an error in what was selected
            Toast.makeText(getApplicationContext(), "Hmmm I messed up. I detected that you clicked on : " + which + "?", Toast.LENGTH_LONG).show();
        }
    }
});

window.show();
Bart _
fuente
1
Sí mucha mejora. Una declaración de cambio mejora más