Android: Erstellen Sie ein Popup mit mehreren Auswahloptionen


109

Ich habe herumgesucht, um herauszufinden, wie ein Popup oder ein Dialogfeld mit 4 Optionen erstellt werden kann.

Ich sehe dieses Bild auf der Android-Entwicklerseite:

Geben Sie hier die Bildbeschreibung ein

Weiß jemand, wie man so etwas wie das auf der rechten Seite codiert? Ich brauche keine Symbole neben meinem Text, ich muss nur in der Lage sein, aus 4 Optionen auszuwählen.

Antworten:


289

Sie können ein StringArray mit den Optionen erstellen, die Sie dort anzeigen möchten, und das Array dann AlertDialog.Buildermit der Methode an ein übergebensetItems(CharSequence[], DialogInterface.OnClickListener) .

Ein Beispiel:

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

Die Ausgabe (unter Android 4.0.3):

Ausgabe

(Hintergrundkarte nicht enthalten .;))


5
.create()ist hier nicht .show()
erforderlich

2
Vielen Dank dafür. Ich wollte wirklich kein XML-Layout für ein einfaches Textmenü implementieren und konnte keinen einfachen Weg finden, dies zu tun, bis ich über diesen Beitrag gestolpert bin.
Christopher Rathgeb

Wie können wir diesen Text zentrieren und die Farbe in diesem Text festlegen? zB rot zeigt die rote Farbe ?? grüner Text wird in grüner Farbe angezeigt?
Ahmad Arslan

Hinweis: Dieses Beispiel ist nicht mehrfach, lesen Sie noch einmal Tittle aus dem Beitrag :)
liefern

Hallo, können Sie auch zeigen, wie ich Aktionen für bestimmte Artikelauswahlen festlegen kann? Beispiel: Ich möchte den Benutzer die App-Sprache ändern lassen, indem er auf eines dieser Elemente klickt (wahrscheinlich mit der if-Anweisung).
Arda Çebi

6

Die Popups sind nichts anderes als AlertDialog.So müssen Sie nur erstellen AlertDialog, dann Ihre gewünschte Ansicht mit aufblasen LayoutInflaterund die aufgeblasene Ansicht mit der setView()Methode von einstellenAlertDialog


4

Versuche dies :

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

Ich denke, switch (font [which]) macht es.

3

ALTERNATIVE MÖGLICHKEIT

Dies ist mein erster Beitrag, daher freue ich mich darauf, meinen Code zu teilen! Das hat bei mir funktioniert:

Platzieren Sie diese beiden Zeilen über dem OnCreate-Ereignis

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

Platzieren Sie diesen Code auf dem Ereignis, das dies auslöst

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
Ja viel Verbesserung. Eine switch-Anweisung verbessert sich mehr
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.