Android: créez une fenêtre contextuelle avec plusieurs options de sélection

109

J'ai cherché à essayer de comprendre comment créer une fenêtre contextuelle ou une boîte de dialogue qui propose 4 options.

Je vois cette image sur le site des développeurs Android:

entrez la description de l'image ici

Est-ce que quelqu'un sait comment coder quelque chose comme celui de droite? Je n'ai besoin d'aucune icône à côté de mon texte, j'ai juste besoin de pouvoir choisir parmi 4 options.

Cornomane
la source

Réponses:

289

Vous pouvez créer un Stringtableau avec les options que vous souhaitez y afficher, puis passer le tableau à un AlertDialog.Builderavec la méthode setItems(CharSequence[], DialogInterface.OnClickListener).

Un exemple:

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 sortie (sur Android 4.0.3):

Production

(Carte de fond non incluse.;))

zbr
la source
5
.create()n'est pas nécessaire ici, .show()renverra la boîte de dialogue créée par le constructeur, puis l'affichera également
TronicZomB
2
Merci beaucoup pour cela. Je ne voulais vraiment pas implémenter une mise en page XML pour un menu texte simple et je n'ai pas trouvé de moyen facile de le faire jusqu'à ce que je tombe sur ce post.
Christopher Rathgeb
Comment pouvons-nous méditer ces textes et pouvons-nous définir la couleur à l'intérieur de ce texte? par exemple, le rouge montre la couleur rouge ?? le texte vert s'affiche en vert?
Ahmad Arslan le
Remarque: cet exemple n'est pas multiple,
Bonjour, pouvez-vous également montrer comment je peux définir des actions pour des sélections d'éléments spécifiques? Exemple: je veux laisser l'utilisateur changer la langue de l'application en cliquant sur l'un de ces éléments (probablement en utilisant l'instruction if).
Arda Çebi
6

Les fenêtres contextuelles ne sont rien d'autre que AlertDialog. Il vous suffit donc de créer AlertDialog, puis de gonfler la vue souhaitée en utilisant LayoutInflateret de définir la vue gonflée en utilisant la setView()méthode deAlertDialog

Vishal Pawale
la source
4

Essaye ça :

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
la source
Je pense que le commutateur (font [qui]) le fait.
3

OPTION ALTERNATIVE

C'est mon premier article, donc je suis ravi de partager mon code! Cela a fonctionné pour moi:

Placez ces deux lignes au-dessus de l'événement OnCreate

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

Placez ce code sur l'événement qui le déclenchera

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 _
la source
1
Oui beaucoup d'amélioration. Une instruction switch améliore davantage