Android: crea un popup con più opzioni di selezione


109

Ho cercato in giro per capire come creare un popup o una finestra di dialogo con 4 opzioni tra cui scegliere.

Vedo questa immagine sul sito per sviluppatori Android:

inserisci qui la descrizione dell'immagine

Qualcuno sa come codificare qualcosa come quello a destra? Non ho bisogno di icone accanto al mio testo, devo solo essere in grado di selezionare tra 4 opzioni.

Risposte:


289

È possibile creare un Stringarray con le opzioni che si desidera mostrare lì e quindi passare l'array a un AlertDialog.Buildercon il metodo setItems(CharSequence[], DialogInterface.OnClickListener).

Un esempio:

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();

L'output (su Android 4.0.3):

Produzione

(Mappa di sfondo non inclusa.;))


5
.create()non è necessario qui, .show()restituirà la finestra di dialogo creata dal costruttore e poi la mostrerà anche
TronicZomB

2
Grazie molte per questo. Non volevo davvero implementare un layout xml per un semplice menu di testo e non sono riuscito a trovare un modo semplice per farlo finché non sono incappato in questo post.
Christopher Rathgeb

Come possiamo mettere in mezzo questo testo e possiamo impostare il colore all'interno di questo testo? ad esempio il rosso mostra il colore rosso ?? il testo verde viene visualizzato in colore verde?
Ahmad Arslan

Nota: questo esempio non è multiplo, leggi di nuovo il titolo dal post :)

Ciao, puoi anche mostrare come posso impostare azioni per selezioni di elementi specifici? Esempio: voglio consentire all'utente di modificare la lingua dell'app facendo clic su uno di questi elementi (probabilmente utilizzando l'istruzione if).
Arda Çebi

6

I pop-up non sono altro che AlertDialog. Quindi devi solo creare AlertDialog, quindi gonfiare la visualizzazione desiderata utilizzando LayoutInflatere impostare la visualizzazione gonfiata utilizzando il setView()metodo diAlertDialog


4

Prova questo :

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();
}

Penso che switch (font [which]) lo stia facendo.

3

OPZIONE ALTERNATIVA

Questo è il mio primo post quindi sono entusiasta di condividere il mio codice! Questo ha funzionato per me:

Posiziona queste due righe sopra l'evento OnCreate

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

Inserisci questo codice sull'evento che lo attiverà

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();

1
Sì, molto miglioramento.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.