Android: crie um pop-up com várias opções de seleção

109

Tenho pesquisado tentando descobrir como criar um pop-up ou uma caixa de diálogo que tem 4 opções para escolher.

Vejo esta imagem no site do desenvolvedor Android:

insira a descrição da imagem aqui

Alguém sabe como codificar algo como o da direita? Não preciso de ícones ao lado do meu texto, só preciso poder selecionar entre 4 opções.

Cornomaníaco
fonte

Respostas:

289

Você pode criar um Stringarray com as opções que deseja mostrar e então passar o array para um AlertDialog.Buildercom o método setItems(CharSequence[], DialogInterface.OnClickListener).

Um exemplo:

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

A saída (no Android 4.0.3):

Resultado

(Mapa de fundo não incluído.;))

zbr
fonte
5
.create()é desnecessário aqui, .show()retornará a caixa de diálogo criada pelo construtor e a mostrará também
TronicZomB
2
Muito obrigado por isso. Eu realmente não queria implementar um layout xml para um menu de texto simples e não consegui encontrar uma maneira fácil de fazer isso até que me deparei com este post.
Christopher Rathgeb
Como podemos intermediar este texto e podemos definir a cor dentro dele? por exemplo, o vermelho mostra a cor vermelha ?? o texto verde é exibido na cor verde?
Ahmad Arslan
Observação: este exemplo não é múltiplo, leia novamente título da postagem :)
Olá, você também pode mostrar como posso definir ações para seleções de itens específicos? Exemplo: quero permitir que o usuário altere o idioma do aplicativo clicando em um desses itens (provavelmente usando a instrução if).
Arda Çebi
6

Os pop-ups são nada, mas AlertDialog.Assim você só precisa criar AlertDialog, em seguida, inflar sua visão desejada usando LayoutInflatere definir a visão inflada usando setView()método deAlertDialog

Vishal Pawale
fonte
4

Experimente isto:

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
fonte
Acho que switch (font [que]) está fazendo isso.
3

OPÇÃO ALTERNATIVA

Este é meu primeiro post, então estou animado para compartilhar meu código! Isso funcionou para mim:

Coloque essas duas linhas acima do evento OnCreate

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

Coloque este código no evento que irá acionar 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 _
fonte
1
Sim, muitas melhorias. Uma instrução switch melhora mais