Uma caixa de diálogo é uma pequena janela que solicita ao usuário tomar uma decisão ou inserir informações adicionais. Um diálogo não preenche toda a tela e é normalmente utilizado para eventos modais, requerendo aos usuários uma interação antes de prosseguir.
Um AlertDialog pode mostrar um título, até três botões, uma lista de itens selecionáveis ou não, ou um layout personalizado. Vamos ver ao decorrer deste artigo todas essas opções.
Diálogo básico

No exemplo básico vamos criar um diálogo como a imagem acima, um título, mensagem e dois botões.
É importante sabermos que ao criarmos o diálogo utilizando os recursos padrões ele será automaticamente desfeita ao pressionar qualquer dos botões.
A criação é simples e em todos os exemplos vamos utilizar o mesmo recurso para a criação do objeto AlertDialog. Utilizaremos a classe AlertDialog.Builder, vamos instanciá-la e configurar o que será exibido (título, mensagem, botões, etc…) após isso vamos pegar o AlertDialog do Builder e mandar exibir o diálogo.
Listagem 1: Exemplo AlertDialog básico
//atributo da classe. private AlertDialog alerta; private void exemplo_simples() { //Cria o gerador do AlertDialog AlertDialog.Builder builder = new AlertDialog.Builder(this); //define o titulo builder.setTitle("Titulo"); //define a mensagem builder.setMessage("Qualifique este software"); //define um botão como positivo builder.setPositiveButton("Positivo", new DialogInterface.OnClickListener() { public void onClick(DialogInterface arg0, int arg1) { Toast.makeText(MainActivity.this, "positivo=" + arg1, Toast.LENGTH_SHORT).show(); } }); //define um botão como negativo. builder.setNegativeButton("Negativo", new DialogInterface.OnClickListener() { public void onClick(DialogInterface arg0, int arg1) { Toast.makeText(MainActivity.this, "negativo=" + arg1, Toast.LENGTH_SHORT).show(); } }); //cria o AlertDialog alerta = builder.create(); //Exibe alerta.show(); }
Diálogo customizado

Seguindo os passos da criação de nosso diálogo básico, agora vamos criar um layout customizado, primeiramente será feita a construção do nosso arquivo XML chamado de ‘alerta.xml’, nele vamos inserir um ImageView e um Button dentro de um LinearLayout.
Listagem 2: Arquivo alerta.xml utilizado no diálogo customizado
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:src="@drawable/imagem_teste" /> <Button android:id="@+id/bt" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Dismiss" /> </LinearLayout>
Agora vamos inserir esse layout no diálogo e tratar a ação do botão. Lembre-se que o AlertDialog está como variável da classe, assim como no primeiro exemplo.
Listagem 3: Exemplo AlertDialog customizado
private void exemplo_layout() { //LayoutInflater é utilizado para inflar nosso layout em uma view. //-pegamos nossa instancia da classe LayoutInflater li = getLayoutInflater(); //inflamos o layout alerta.xml na view View view = li.inflate(R.layout.alerta, null); //definimos para o botão do layout um clickListener view.findViewById(R.id.bt).setOnClickListener(new View.OnClickListener() { public void onClick(View arg0) { //exibe um Toast informativo. Toast.makeText(MainActivity.this, "alerta.dismiss()", Toast.LENGTH_SHORT).show(); //desfaz o alerta. alerta.dismiss(); } }); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Titulo"); builder.setView(view); alerta = builder.create(); alerta.show(); }
Diálogos de lista de seleção simples
Também com base nos exemplos anteriores, fazer uma lista nada mais é do que você definir um vetor de informações e inseri-las no Builder do diálogo.
Diálogo de seleção simples

Neste exemplo foi utilizado um ListAdapter para gerar a lista, para isso foi criado um layout para os itens.
Listagem 4: Item que contem o TextView da lista
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="20sp" android:textColor="#FF000000" android:padding="10sp" />
Como vimos, nosso item é só um TextView, veja na listagem abaixo como construir o adaptador e inserir no AlertDialog.
Listagem 5: Implementação do AlertDialog em lista
private void exemplo_lista_single() { //Lista de itens ArrayList<String> itens = new ArrayList<String>(); itens.add("Ruim"); itens.add("Mediano"); itens.add("Bom"); itens.add("Ótimo"); //adapter utilizando um layout customizado (TextView) ArrayAdapter adapter = new ArrayAdapter(this, R.layout.item_alerta, itens); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Qualifique este software:"); //define o diálogo como uma lista, passa o adapter. builder.setSingleChoiceItems(adapter, 0, new DialogInterface.OnClickListener() { public void onClick(DialogInterface arg0, int arg1) { Toast.makeText(MainActivity.this, "posição selecionada=" + arg1, Toast.LENGTH_SHORT).show(); alerta.dismiss(); } }); alerta = builder.create(); alerta.show(); }
Diálogo de lista com várias seleções
Os itens da lista do diálogo de seleções múltiplas se resumem em um componente de texto e um CheckBox.
Diálogo de seleção múltipla
Neste exemplo, o que temos de diferente são dois vetores, um de CharSequence[] onde serão armazenados os textos, e um vetor de boolean[] onde ficarão armazenadas as informações de habilitado ou desabilitado de cada item. Por isso que é muito importante construir esse vetor de acordo com o tamanho do vetor do CharSequence[]. Na listagem abaixo será mostrado como implementar e utilizar essa lista.
Listagem 6: Implementação do AlertDialog em lista
private void exemplo_lista_multi() { CharSequence[] charSequences = new CharSequence[]{"Filmes", "Dormir","Sair"}; final boolean[] checados = new boolean[charSequences.length]; AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("O que você gosta?"); builder.setMultiChoiceItems(charSequences, checados, new DialogInterface.OnMultiChoiceClickListener() { public void onClick(DialogInterface arg0, int arg1, boolean arg2) { checados[arg1] = arg2; } }); builder.setPositiveButton("Confirmar", new DialogInterface.OnClickListener() { public void onClick(DialogInterface arg0, int arg1) { StringBuilder texto = new StringBuilder("Checados: "); for (boolean ch : checados) { texto.append(ch).append("; "); } Toast.makeText(MainActivity.this, texto.toString(), Toast.LENGTH_SHORT).show(); } }); alerta = builder.create(); alerta.show(); }
Observe que o listener do setMultiChoiceItems é diferente pois utilizamos a interface OnMultiChoiceClickListener() que nos retornara a posição e o estado do botão.
Conclusão
O AlertDialog é uma classe essencial no desenvolvimento de aplicações Android, permitindo ao usuário uma caixa simples para a seleção de opções.
Como todo componente do Android, o AlertDialog é totalmente customizável, permitindo o uso de um layout personalizado, com seus próprios botões e informações. Seu uso além de simples e viável deve ser estudado para atender ao usuário. Lembre-se sempre de pesquisar na documentação do Android como utilizar cada recurso da melhor maneira possível.
Projeto de exemplo: DROPBOX
(Esta publicação foi feita por min no DevMedia (link). )
Um pensamento em “Android – Exibindo caixas de diálogos no Android com AlertDialog”