Caso prefira, você encontrará todo esse material, em inglês, no site do Developer Android. A tradução e comentários dos materiais eu faço livremente para ajudar a comunidade que fala português.

sexta-feira, 4 de março de 2011

Interface de Usuários - Criando Diálogos

Um diálogo é usualmente uma janela pequena que aparece sobre a atividade corrente. A atividade que roda perde o foco e o diálogo aceita todas as interações do usuário. Diálogos são normalmente usados para notificações que devem interromper o usuário e solicitá-lo a fazer algumas pequenas tarefas diretamente relacionadas com a aplicação em progresso (como uma barra de progresso ou prompt de login).

A classe Dialog é a base para a criação de diálogos. Contudo, você tipicamente não deverá instanciar uma classe Dialog diretamente. Ao invés disso, você deve usar uma das subclasses abaixo:

AlertDialog
Esse diálogo que pode gerenciar nenhum, um, dois ou três botões e/ou uma lista de itens selecionáveis que podem incluir checkboxes ou botões do tipo radio. O AlertDialog é capaz de construir a maioria dos diálogos necessários para a interface e é o tipo de diálogo mais sugerido a que seja usado.

ProgressDialog
É um tipo de diálogo que mostra uma roda ou barra de progresso. Como é uma extensão de AlertDialog, também suporta botões.

DatePickerDialog
É um diálogo que permite ao usuário selecionar uma data.

TimePickerDialog
É um diálogo que permite ao usuário selecionar a hora.

Mostrando um diálogo

Um diálogo sempre é criado e mostrado como parte de uma atividade. Você normalmente vai criar diálogos dentro do método callback onCreateDialog(int). Quando você usa esse método callback, o sistema Android automaticamente gerencia o estado de cada diálogo e se torna o proprietário de cada diálogo. Assim, cada diálogo herda certas propriedades da atividade.

Nota: Se você decidir criar um diálogo fora do método onCreateDialog(), ele não será ligado à atividade. Você pode, contudo, ligá-lo a uma atividade com o método setOwnerActivity(Activity).

Quando você quer mostrar um diálogo, chame showDialog(int) e passe um inteiro que unicamente identifica o diálogo que você quer mostrar.

Quando um diálogo é requisitado pela primeira vez, o Android chama o método onCreateDialog(int) da atividade, que é onde você deverá instanciar a classe Dialog. A esse método callback é passado o mesmo ID que você passou para showDialog(int). Após você criar o diálogo, ele retorna o objeto para o final do método.

Antes do diálogo ser mostrado, o Android também chama um método callback chamado onPrepareDialog(int, Dialog). Defina esse método se você quiser mudar quaisquer propriedades para o diálogo a cada vez que ele for chamado. Esse método é chamado todas as vezes que o diálogo é aberto, enquanto que o onCreateDialog(int) é chamado apenas uma vez, na primeira vez que o diálogo é aberto. Se você não definir onPrepareDialog(), então o diálogo vai manter a mesma configuração que da vez anterior que o abriu. A esse método também é passado o ID do diálogo, juntamente com o objeto Dialog que você criou em onCreateDialog().

A melhor maneira de se definir os métodos callback onCreateDialog(int) e o onPrepareDialog(int, Dialog) é com uma sentença switch que checa o parâmetro id que é passado para dentro do método. Cada case deve checar para um único Id de diálogo. Por exemplo, imagine um jogo onde o usuário tenha dois diálogos diferentes: um para indicar que o jogo está pausado e outro para indicar que o jogo está encerrado. Primeiro, defina uma variável do tipo integer para cada diálogo:

static final int DIALOG_PAUSED_ID = 0;
static final int DIALOG_GAMEOVER_ID = 1;

Então, defina o callback para onCreateDialog(int) com o switch case para cada ID:

protected Dialog onCreateDialog(int id) {
    Dialog dialog;
    switch(id) {
    case DIALOG_PAUSED_ID:
        // Faz o trabalho para definir que o jogo está pausado
        break;
    case DIALOG_GAMEOVER_ID:
        // Faz o trabalho para definir que o jogo encerrou
        break;
    default:
        dialog = null;
    }
    return dialog;
}
Quando é hora de mostrar um dos diálogos, chame showDialog(int) com o ID do diálogo:
showDialog(DIALOG_PAUSED_ID);
Encerrando um Diálogo

Se você quiser encerrar um diálogo, você pode fazê-lo chamando dismiss() no objeto de diálogo. Se necessário, você também pode chamar dismissDialog(int) dentro da atividade, a qual chama dismiss() no diálogo para você.

Se você estiver usando onCreateDialog(int) para gerenciar o estado de seus diálogos, então a cada vez que seu diálogo é encerrado, o estado do objeto de diálogo se mantém com a atividade. Se você decidir que isso não mais necessita do objeto ou que é importante que o estado seja limpo, então você deve chamar removeDialog(int). Esse método vai remover quaisquer referências internas ao objeto e se o diálogo está sendo mostrado, ele vai ser encerrado e desaparecerá da tela.

Usando dismiss listeners

Se você quer que sua aplicação faça algum procedimento assim que o diálogo é encerrado, você deve usar um dismiss listeners no seu diálogo.

Primeiramente defina a interface DialogInterface.OnDismissListener. A interface tem apenas um únido método, onDismiss(DialogInterface), que pode ser chamada quando o diálogo é encerrado. Então simplesmente passe sua implementação de OnDismissListener para setOnDismissListener().

Contudo, note que o diálogo pode também ser cancelado. Esse é um caso especial que indica que o diálogo foi explicitamente cancelado pelo usuário. Isso ocorre quando o usuário pressiona o botão back para fechar o diálogo ou se o diálogo explicitamente chama pelo método cancel() ou, caso exista, o usuário tenha pressionado um botão de cancelamento existente no diálogo. Quando o diálogo é cancelado, o OnDismissListener será notificado, mas se você quiser ser informado que o diálogo foi explicitamente cancelado (e não encerrado normalmente), então você deve registrar um DialogInterface.OnCancelListener com setOnCancelListener().

Criando um AlertDialog


Um alert dialog é uma extensão da classe Dialog. Essa classe é capaz de construir a maioria das interfaces. Você deve usá-lo para diálogos que tenham algumas das seguintes características:
  • Um título
  • Uma mensagem de texto
  • Um, dois ou três botões
  • Uma lista de itens selecionáveis (com checkboxes ou radio buttons opcionais).
Para criar um AlertDialog, use a subclasse de construção AlertDialog.Builder. Consiga um Builder com AlertDialog.Builder(Context) e então use os métodos públicos da classe para definir todas as propriedades do AlertDialog. Após você ter criado o Builder, retorno o objeto AlertDialog com o método create().

Os tópicos do próximo mostrarão como definir várias propriedades de um AlertDialog usando a classe AlertDialog.Builder. Se você usar quaisquer dos códigos seguintes dentro de seu método callback onCreateDialog, você pode retornar o objeto de diálogo resultante para ser mostrar o diálogo.

No próximo post, como adicionar botões, listas, checkboxes e radio buttons. Além disso, também falarei sobre como criar ProgressDialog e CustomDialog.

0 comentários:

Portions of this page are modifications based on work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 2.5 Attribution License.
Related Posts Plugin for WordPress, Blogger...