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.

segunda-feira, 7 de março de 2011

Interface de Usuários - Criando Diálogos Parte 2

Adicionando botões

Para criar um AlertDialog com botões lado a lado como o mostrado na imagem ao lado, use o método set...Button():
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Are you sure you want to exit?")
       .setCancelable(false)
       .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
                MyActivity.this.finish();
           }
       })
       .setNegativeButton("No", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
                dialog.cancel();
           }
       });
AlertDialog alert = builder.create();
Primeiro, adicione uma mensagem para o diálogo com setMessage(CharSequence). Então continue o encadeamento de métodos e configure o diálogo para ser not cancelable (não cancelável, para que o usuário não possa fechar o diálogo pressionando o botão de voltar) com o método setCancelable(boolean). Para cada botão, use um dos métodos dentro de set...Button(), como setPositiveButton(), que aceita o nome para o botão e um DialogInterface.OnClickListener que define a ação a ser tomada quando o usuário seleciona o botão.

Nota: Você só pode adicionar um botão de cada tipo de um AlertDialog. Ou seja, não é possível ter mais que um botão do tipo positivo. Isso limita o número de botões possíveis a três: positivo, neutro ou negativo. Esses nomes são tecnicamente irrelevantes para a função dos botões, mas você deve manter um controle do que cada um deles faz.

Adicionando uma lista

Para criar um AlertDialog() com uma lista de itens selecionáveis como o mostrado na imagem seguinte, use o método setItems():

final CharSequence[] items = {"Red", "Green", "Blue"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setTitle("Pick a color");builder.setItems(items, new DialogInterface.OnClickListener() {    public void onClick(DialogInterface dialog, int item) {        Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();    }});AlertDialog alert = builder.create();
Primeiro, adicione um título ao diálogo com setTitle(CharSequence). Então, adicione os itens selecionáveis com setItems(), que aceita um array de itens a serem mostrados e um DialogInterface.OnClickListener que define a nação a ser tomada quando o usuário seleciona um item.

Adicionando checkboxes e radio buttons

Para criar uma lista de itens de multipla escolha (checkboxes) ou itens de escolha única (radio buttons) dentro de um diálogo, use o método setMultiChoiceItems() e setSingleChoiceItems(), respectivamente. Se você criar uma dessas listas selecionáveis no método callback onCreateDialog() , o Android gerencia o estado para você. Enquanto a atividade estiver ativa, o diálogo se lembrará das opções que foram selecionadas anteriormente, mas quando o usuário sair da atividade, a seleção será perdida.

Nota: Para salvar uma seleção quando um usuário sair da atividade ou pausá-la, você deve salvar e restaurar as configurações através do ciclo de vida da atividade. Para permanentemente salvar a seleção, mesmo que o processo da atividade corrente tenha sido encerrado por completo, você precisará fazê-lo em algum tipo de banco de dados, usando técnicas de Data Storage.

Para criar um AlertDialog com uma lista de itens de escolha única, use o código abaixo para isso:

final CharSequence[] items = {"Red", "Green", "Blue"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Pick a color");
builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int item) {
        Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
    }
});
AlertDialog alert = builder.create();
Criando um ProgressDialog

Um ProgressDialog é uma extensão de AlertDialog que pode mostrar uma animação de progresso na forma de um círculo giratório, quando uma tarefa tem o progresso onde não se pode definir o término dele, ou uma barra de progresso, para uma tarefa com progresso definido. O diálogo pode também prover botões, como um botão de cancelar download, pode exemplo.

Abrir um diálogo de progresso é tão simples quanto chamar ProgressDialog.show(). Por exemplo, o diálogo de progresso mostrado na imagem ao lado pode ser facilmente alcançada sem ter de se gerenciar o diálogo através de onCreateDialog(int), como mostrado abaixo:

ProgressDialog dialog = ProgressDialog.show(MyActivity.this, "",
                        "Loading. Please wait...", true);

O primeiro parâmetro é o contexto da aplicação, o segundo é o título para o diálogo (que foi deixado em branco), o terceiro a mensagem em si e o último parâmetro é se o progresso é inteterminado ou não.

O valor padrão para o diálogo de progresso é o da imagem acima, com o círculo giratório. Se você quer criar uma barra de progresso que mostre o progresso à medida que vai sendo realizada a tarefa, mais código é necessário, como mostrado na próxima seção.

Mostrando um progress bar.

Para mostrar uma progressão com uma barra de progressão animada:


  1. Inicialize o ProgressDialog com um construtor de classe, ProgressDialog(Context).
  2. Configure o estilo da progressão como "STYLE_HORIZONTAL" com setProgressStyle(int) e configure outros aspectos, como a mensagem.
  3. Quando estiver pronto para mostrar o diálogo, chame show() e retorne o ProgressDialog para o onCreateDialog(int).
  4. Você pode incrementar o progresso a ser mostrado na barra chamando ou setProgress(int) com o valor do percentual completado até então ou incrementeProgressBy(int) com um valor para o total de percentual a ser avançado na barra.
Um exemplo seria:
ProgressDialog progressDialog;
progressDialog = new ProgressDialog(mContext);
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setMessage("Loading...");
progressDialog.setCancelable(false);
Criando um diálogo customizado

Se você quer um diálogo com design customizado, você pode criar seu próprio layout para a janela de diálogo com layout e elementos widget internos a este. Após você ter definido o layout, passe o objeto View root ou o ID do recurso de layout para setContentView(View).

Por exemplo, para se criar o diálogo ao lado:

1) Crie um layout XML e salve-o como custom_dialog.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/layout_root"
              android:orientation="horizontal"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:padding="10dp"
              >
    <ImageView android:id="@+id/image"
               android:layout_width="wrap_content"
               android:layout_height="fill_parent"
               android:layout_marginRight="10dp"
               />
    <TextView android:id="@+id/text"
              android:layout_width="wrap_content"
              android:layout_height="fill_parent"
              android:textColor="#FFF"
              />
</LinearLayout>


2) Configure o layout acima como a view de conteúdo para o diálogo e defina o conteúdo para o ImageView e o elemento TextView.

Context mContext = getApplicationContext();
Dialog dialog = new Dialog(mContext);
 
dialog.setContentView(R.layout.custom_dialog);
dialog.setTitle("Custom Dialog");
 
TextView text = (TextView) dialog.findViewById(R.id.text);
text.setText("Hello, this is a custom dialog!");
ImageView image = (ImageView) dialog.findViewById(R.id.image);
image.setImageResource(R.drawable.android);
3) É isso.






1 comentários:

Henrique Melo disse...

Muito útil. Obrigado.

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...