94
Android Interfaces: widgets

Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Android

Interfaces: widgets

Page 2: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Vida de uma Activity

• Acontece entre a primeira chamada para onCreate até a chamada do finally() que resulta no evento onDestroy().

• Uma Activity irá fazer toda a configuração do estado de suas propriedades no OnCreate() e liberar todos os recursos remanescentes em onDestroy().

2

Page 3: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Vida de uma Activity

3

Page 4: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Tempo de visibilidade de uma Activity

• Acontece entre uma chamada para onStart() até uma chamada correspondente para onStop().

• Durante este período o usuário pode ver a Activity na tela, embora não possa estar em primeiro plano e interagir com o usuário.

• Entre estes dois métodos que você pode manter os recursos que são necessários para mostrar a atividade para o usuário.

4

Page 5: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Tempo de visibilidade de uma Activity

5

Page 6: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Activity no topo da pilha

• Acontece entre uma chamada para onResume() até uma chamada correspondente para onPause().

• Durante esse tempo, a Activity está na frente de todas as outras atividades e pode interagir com o usuário.

6

Page 7: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Resumindo...

7

Page 8: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Interfaces das Activities

• Definição por XML

o Escolha normalmente usada pelos desenvolvedores

• Programação

o Usada para criação dinâmica de telas

8

Page 9: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Interface Gráfica com Usuário

• Baseada em View e ViewGroup

• View: base para subclasses denominadas Widgets que oferecem uma forma de implementar os elementos gráficos de um interface

o TextView, Button , TextEdit, RadioButton, Checkbox, etc

• ViewGroup: container de Views e ViewGroups.

o base para componentes de layouts, como LinearLayout, FrameLayout, AbsoluteLayout, RelativeLayout, TableLayout, etc.

9

Page 10: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

View

• Estrutura de dados, cujas propriedades armazenam dados do layout e determinada área de interface.

• Capaz de gerenciar suas propriedades como proporção, posição, foco, aparência (baseado no status), scrolling.

10

Page 11: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Relembrando... • Após a criação do projeto, será criada uma

estrutura de diretórios necessária para um projeto Android.

• A pasta src contém os fontes das classe que representam as Activity, etc...

• A pasta gen contém uma classe utilitária “R.java”, gerada automaticamente

o Recomenda-se não alterar esta classe manualmente

o é utilizada para facilitar a obtenção dos componentes ou recursos apenas informando o seu nome.

11

Page 12: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Relembrando... • A pasta res contém os recursos que serão

utilizados pela aplicação.

• Estes recursos são organizados em pastas de acordo com o seu propósito:

o drawable: deve conter todos os recursos de imagens (PNG e JPG) utilizados na aplicação.

o layout: contém as definições dos layouts utilizados na aplicação que nada mais são do que arquivos no formato XML.

o values: contém valores estáticos (strings, por exemplo) que podem ser carregados de um arquivo XML.

12

Page 13: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

android.widget

• O pacote android.widget reúne elementos gráficos para serem utilizados para interação humano aplicação

o TextView

o EditText

o Button

o Outros...

13

Page 14: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Widgets

• O pacote android.widget reúne elementos gráficos para serem empregados para interação homem-máquina da aplicação.

• Arraste um Button da Palette para a tela. Mantenha o Button selecionado e veja as propriedades na aba Properties

• Procure a propriedade Id e altere para: @+main/btnNavegar .

• Aproveite e também altere o Text para Navegar. 14

Page 15: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Interface de Usuário

Esta UI contém:

- um container Name;

- um container Address;

- um container Parente;

15

Page 16: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Editor de Layout

• Um ponto interessante na tecnologia adotada pelo Android:

o forma que é desenvolvida a interface

o Em Java costumamos criar interfaces pelo código

o Nesta plataforma as interfaces por padrão são feitas em arquivos .xml.

16

Page 17: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Associando XML ao Código Fonte

• Activity gerada no processo de criação do projeto será a principal

• Arquivo .XML gerado será carregado no onCreate() da Activity acima.

17

Page 18: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

TextView

• utilizado para exibir um texto e permitir a sua edição.

• Por padrão sua configuração não permite a edição, substitui o Label utilizado nas outras tecnologias.

18

Page 19: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

EditText

• Herdeiro de TextView

• sua configuração permite a edição de texto por padrão,

o similar ao TextBox (Framework .NET) ou

o do JTextFied (Java).

19

Page 20: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Button

• Controle utilizado para disponibilizar ações ao usuário

• Pode assumir o comportamento

o clicável (click-button) ou

o pressionado com estado (push-button).

Por padrão o comportamento é click-button.

20

Page 21: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Exemplo

• Neste novo projeto vamos exigir um texto e ao clicar no botão o texto será transformado em um texto todo maiúsculo.

21

Page 22: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Exercício

22

Page 23: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Exercício

23

Page 24: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

ToggleButton

• botão que exibe um estado "ON" ou "OFF" no qual o usuário pode pressionar e alterar o estado caso queira.

• Exemplo:

o Crie um projeto simples com um ToggleButton na tela, e a medida que ele pressiona ou libera vamos escrever no output a ação executada.

24

Page 25: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Solução

25

Page 26: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

RadioButton e RadioGroup • RadioButton : botão de dois estados: marcado ou

desmarcado.

o Quando está desmarcado, o usuário pode pressionar e marcar.

o Depois de marcado o RadioButton não pode ser desmarcado pelo usuário pela interface (diretamente).

o Não faz sentido usar um RadioButton isolado.

• Utiliza-se grupos de RadioButtons associados em um RadioGroup,

o Quando o usuário marca um RadioButton, o RadioGroup automaticamente desmarca os demais.

o Utiliza-se o RadioGroup para gerenciar um conjunto de RadioButton no qual exigimos uma escolha do usuário dentre o grupo, ou seja, exigir uma escolha somente.

26

Page 27: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Exemplo

• O usuário vai ter um RadioGroup na tela, e a medida que ele marca as opções vamos escrever na própria tela usando uma janelinha Toast

27

Page 28: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Lay-out do formulário

28

Page 29: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Código no onCreate

29

// Como sempre, pegando os objetos da interface e

// armazenando em atributos da classe

this.rdgGrupoOp01 = (RadioButton)this.findViewById(R.main.rdgGrupoOp01);

this.rdgGrupoOp02 = (RadioButton)this.findViewById(R.main.rdgGrupoOp02);

this.rdgGrupoOp03 = (RadioButton)this.findViewById(R.main.rdgGrupoOp03);

// Criando os eventos, só que em vez de criar um evento

// para cada componente conforme os demais exemplos

// vou criar um único tratador de evento (ver o código a seguir)

this.rdgGrupoOp01.setOnClickListener(this.rdgGrupo_Click);

this.rdgGrupoOp02.setOnClickListener(this.rdgGrupo_Click);

this.rdgGrupoOp03.setOnClickListener(this.rdgGrupo_Click);

// Marcar como a Opção 1 como padrão

this.rdgGrupoOp01.setChecked(true);

Page 30: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Tratador de eventos

30

/**

* Tratador do evento Click para todos as opções Radio

*/

private RadioButton.OnClickListener rdgGrupo_Click = new

RadioButton.OnClickListener() {

public void onClick(View v) {

String str = "Opção 1 : " + rdgGrupoOp01.isChecked() +"\n";

str += "Opção 2 : " + rdgGrupoOp02.isChecked() + "\n";

str += "Opção 3 : " + rdgGrupoOp03.isChecked();

// O Toast será estudado mais a frente, apenas use ele

// para exibir uma pequena janela com um texto

Toast.makeText(Main.this, str, Toast.LENGTH_SHORT).show();

}

};

Page 31: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

CheckBox

• Ao contrário do RadioButton o CheckBox pode estar sozinho, ter mais de um CheckBox marcado ao mesmo tempo, e até não ter nenhum marcado.

• Não requer controlador de grupo.

31

Page 32: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Exemplo

• O usuário vai marcar CheckBox dizendo se tem gatos e cachorros

32

Page 33: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Código do onCreate

33

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

// Como sempre, pegando os objetos da interface e

// armazenando em atributos da classe

this.ckbCachorro = (CheckBox)this.findViewById(R.main.ckbCachorro);

this.ckbGato = (CheckBox)this.findViewById(R.main.ckbGato);

// Criando os eventos, só que em vez de criar um evento

// para cada componente conforme os demais exemplos

// vou criar um único tratador de evento (ver o código

// mais abaixo)

this.ckbCachorro.setOnClickListener(this.rdgGrupo_Click);

this.ckbGato.setOnClickListener(this.rdgGrupo_Click);

}

Page 34: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Tratador do evento Click

34

/**

* */

private CheckBox.OnClickListener rdgGrupo_Click = new

CheckBox.OnClickListener() {

public void onClick(View v) {

String str = "Possui cachorros : " + ckbCachorro.isChecked() +

"\n";

str += "Possui gatos : " + ckbGato.isChecked();

Toast.makeText(Main.this, str, Toast.LENGTH_SHORT).show();

}

};

Page 35: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Spinner

• Este componente possui um nome diferente em cada tecnologia:

o JComboBox

o DropDownList

o ComboBox

• É um controle que permite a seleção de itens de uma lista, porem seu estado adormecido tem a aparência de uma caixa (com a descrição selecionada) associado a um botão, neste botão uma imagem de um triangulo.

35

Page 36: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Exemplo • Neste projeto o usuário deverá escolher uma

palavra de uma lista de palavras.

36

// crie a activity implementando os eventos para tratar a escolha do spinner

public class Main extends Activity implements

AdapterView.OnItemSelectedListener{

....

// Resgatando a referência do objeto

Spinner spinner = (Spinner) findViewById(R.id.spinner1);

// Criando um Adapter com os itens do array

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,

android.R.layout.simple_dropdown_item_1line, OPCOES);

// Passando o Adapter com as opções para o Spinner

spinner.setAdapter(adapter);

// Criando o evento Selected

spinner.setOnItemSelectedListener(this);

}

Page 37: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Código

37

/**

* Evento que ocorre quando algum item é selecionado

*/

public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {

// Exibindo a seleção feita pelo usuário

Toast.makeText(parent.getContext(), "Você escolheu: " +

OPCOES[position], Toast.LENGTH_LONG).show();

}

/**

* Evento que ocorre quando a lista é aberta mais o usuário não seleciona nada

*/

public void onNothingSelected(AdapterView parent) {

// Não faça nada

}

// Array montado só para ter as opções

private static final String[] OPCOES = new String[] { "Cadeira", "Braço", "Cor", "Encosto", "Mola", "Estofada",

"Azul", "Vermelha" , "Rodinha"};

Page 38: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Atenção

• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe.

• Se for uma escolha com posterior ação de salvar (em um botão por exemplo) então pegue o valor somente neste momento.

• Use o método getSelectedItemPosition(). Spinner s = (Spinner)findViewById(R.id.spinner1);

int x = s.getSelectedItemPosition();

38

Page 39: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Data e Hora

• DatePicker

o Componente destinado a edição de uma data contendo Ano, Mês e Dia.

o Possui botões grandes, visto que nesta plataforma não seu usa as famosas “canetinhas” e sim as pontas dos dedos.

39

Page 40: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Data e Hora

• TimePicker

o Componente destinado a edição de Hora e Minuto.

40

Page 41: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Exemplo

• Este aplicativo que permite que o usuário selecione uma data e uma hora e clique num botão “OK”.

• Quando clicar, exibir uma mensagem com os valores selecionados no DatePicker e TimePicker.

41

Page 42: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Código

42

// Recuperando objeto Data

DatePicker dtpData = (DatePicker) this.findViewById(R.main.dtpData);

// Alterando o objeto data

dtpData.updateDate(1972, 06, 12);

// Resgatando o controle Button e criando um evento par ele

Button btnVer = (Button) this.findViewById(R.main.btnVer);

btnVer.setOnClickListener (new OnClickListener() {

public void onClick(View v) {

btnVer_Click(v);

}

});

}

Page 43: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Código

43

/**

* Evento que ocorre quando botão é pressionado

*/

public void btnVer_Click(View v)

{

// Resgatando a referência

DatePicker dtpData = (DatePicker)this.findViewById(R.main.dtpData);

TimePicker pthHora = (TimePicker)this.findViewById(R.main.pthHora);

// Utilizando os métodos getMonth(), getDatyOfMonth(), getYear(),

getCurrentHour() e getCurrentMinute

// para pegar os valores dos controles alterados pelo usuário

Toast.makeText(this, "Data: " + dtpData.getDayOfMonth() + "/" +

dtpData.getMonth() + "/" + dtpData.getYear() + "\nHora: " +

pthHora.getCurrentHour() + ":" + pthHora.getCurrentMinute(), 30).show();

}});

}

Page 44: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

CalendarView

• Widget desenvolvido para exibir e selecionar uma ou mais datas

• Este componente só pode ser utilizado a partir da versão 11 da API (Android 3.0).

44

Page 45: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Chronometer

• Implementa um temporizador simples.

• Iniciamos a contagem a partir da chamada do método start() e paralisamos a contagem chamando o método stop().

45

Page 46: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Código

46

public void btnIniciarParar_Click(View v) {

// Os métodos Start() e Stop() alteram o status do Cronometro

if(ligado)

this.chronometer.stop();

else

this.chronometer.start();

// Comutar o valor apenas

ligado = !ligado;

}

public void btnZerar_Click(View v){

this.chronometer.stop();

// Zeramos o contador usando stBase()

this.chronometer.setBase(SystemClock.elapsedRealtime());

ligado = false;

}

Page 47: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

ImageView

• Classe que reúne membros destinados a exibição de imagem.

• Uma imagem pode ser carregada dentro da própria aplicação como uma Resource ou ser carregado a partir de um caminho dentro do Android

• Você pode organizar os recursos (Resources) do projeto Android baseado em vários critérios de configurações, incluindo a língua, a região, as características da tela, métodos de entrada, etc..

47

Page 48: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

ImageView

• A plataforma Android possui um mecanismo muito robusto para o carregamento dos recursos apropriados em tempo de execução, imagine que precisamos exibir um logo na tela inicial, podemos criar três versões do logo com densidades diferentes, seriam adicionados nas pastas:

o drawable-hdpi : imagens de alta densidade,

o drawable-mdpi : de média densidade e

o drawable-ldpi de baixa densidade.

• Então nossas três versões de logo ficarão em:

o /res/drawable-ldpi/meuLogo.png

o /res/drawable-mdpi/meuLogo.png

o /res/drawable-hdpi/meuLogo.png

48

Page 49: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

ImageView

• Crie um projeto com 3 imagens diferentes, com o mesmo nome e teste em densidades diferentes (para poder ver que ele busca as imagens em pastas diferentes)

49

Page 50: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

ImageView

• Altere a densidade do dispositivo:

50

Page 51: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

ImageView • Adicione um botão para trocar a imagem.

51

Button btnCarregar = (Button)this.findViewById(R.main.btnCarregar);

btnCarregar.setOnClickListener( new OnClickListener(){

public void onClick(View v)

{

btnCarregar_Click(v);

}

}); public void btnCarregar_Click(View v)

{

ImageView img = (ImageView) this.findViewById(R.main.imgLogo);

// Usamos o método setImageResource() par alterar a imagem quando

// ela está anexada ao projeto

img.setImageResource(R.drawable.outraImagem);

}

Page 52: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

ImageView • Para usar uma imagem do sdcard

52

public void btnCarregar_Click(View v)

{

ImageView img = (ImageView) this.findViewById(R.main.imgLogo);

// Caminho da imagem

String imgPath = "/sdcard/outraImagem.jpg";

// Cria um File para validar se existe arquivo

File imgFile = new File(imgPath);

if (imgFile.exists() ){

// Criamos um Bitmap

Bitmap myBitmap = BitmapFactory.decodeFile(imgPath);

// método setImageBitmap() altera a imagem anexada

img.setImageBitmap(myBitmap);

}

else

{

// Imagem padrão, pois não existe a imagem que procuramos

img.setImageResource(R.drawable.icon);

} } }

Page 53: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

ImageButton

• ImageButton realmente é uma junção de botão e imagem,

o terá bordas como um botão e uma imagem dentro,

53

Page 54: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

AutoCompleteTextView

• AutoCompleteTextView permite que o usuário digite uma determinada informação, exibindo opções de palavras;

• Ou seja, a medida que o usuário digita a palavra desejada a aplicação sugere opções.

• Para caixa de texto com palavras simples o AutoCompleteTextView é o componente indicado.

54

Page 55: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

AutoComplete

55

Page 56: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

MultiAutoCompleteTextView

• Estende de AutoCompleteTextView,

• disponibiliza ao usuário uma série de opções, incluindo a opção de utilizar um MultiAutoCompleteTextView.Tokenizer para selecionar as opções sugeridas.

56

Page 57: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Exercícios

• Crie um projeto no qual o usuário deverá digitar algumas palavras e o sistema deverá ajudar exibindo uma lista de possíveis palavras.

• Comece montando um atributo na classe Main.java do tipo array de String (linha 30), neste array vamos adicionar as possíveis opções que eu acredito que o usuário encontre quando estiver em campo.

57

Page 58: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Exercício: Lay-out

58

<AutoCompleteTextView android:id="@+main/txtAuto" android:layout_width="match_parent" android:layout_height="wrap_content" /> <MultiAutoCompleteTextView android:id="@+main/txtMulti" android:layout_width="match_parent" android:layout_height="wrap_content" android:completionThreshold="1" />

Page 59: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Código

59

public class Main extends Activity {

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

// Criando um Adapter para associar a um array de opções mais prováveis

ArrayAdapter<String> adapter = new

ArrayAdapter<String>(this,

android.R.layout.simple_dropdown_item_1line, OPCOES);

// Resgatando o objeto (definido no XML)

AutoCompleteTextView txtAutoComplete =

(AutoCompleteTextView)this.findViewById(R.main.txtAuto);

MultiAutoCompleteTextView txtMultiAutoComplete =

(MultiAutoCompleteTextView)this.findViewById(R.main.txtMulti);

Page 60: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Código

60

// Passando o Adapter para os dois objetos

txtAutoComplete.setAdapter(adapter);

txtMultiAutoComplete.setAdapter(adapter);

// Passando um Tokenizer para o Multi

txtMultiAutoComplete.setTokenizer(new

MultiAutoCompleteTextView.CommaTokenizer());

}

private static final String[] OPCOES = new String[] {

"Cadeira", "Braço", "Cor", "Encosto", "Mola", "Estofada",

"Azul", "Vermelha" , "Rodinha"

};

}

Page 61: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

MultiAutoComplete

61

Page 62: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Crie EspaçoTokenizer

62

public class EspacoTokenizer implements Tokenizer {

// Precisamos sobrescrever 3 métodos, o primeiro está relacionado

// com a localicação do final do Token

@Override

public int findTokenEnd(CharSequence text, int cursor) {

int pos = text.toString().indexOf(' ', cursor);

return (pos < 0) ? (text.length() - 1) : (pos - 1);

}

// O segundo está relacionado com o início da sequência

@Override

public int findTokenStart(CharSequence text, int cursor) {

int pos = text.toString().lastIndexOf(' ', cursor);

return (pos < 0) ? 0 : (pos + 1);

}

Page 63: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Espaço Tokenizer

63

// O terceiro deve avaliar a palavra escolhida e escolher

// o Token que será usado após

@Override

public CharSequence terminateToken(CharSequence text) {

String textStr = text.toString();

// Se o texto excolhido finaliza com espaço então não vamos fazer nada

// caso contrário vamos adicionar um espaço no final

if(textStr.endsWith(" "))

return textStr;

else

return textStr + " ";

}

}

Page 64: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Código da Activity

64

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,

android.R.layout.simple_dropdown_item_1line, OPCOES);

// Resgatando o objeto (definido no XML)

AutoCompleteTextView txtAutoComplete =

(AutoCompleteTextView)this.findViewById(R.main.txtAuto);

MultiAutoCompleteTextView txtMultiAutoComplete =

(MultiAutoCompleteTextView)this.findViewById(R.main.txtMulti);

// Passando o Adapter para os dois objetos

txtAutoComplete.setAdapter(adapter);

txtMultiAutoComplete.setAdapter(adapter);

// LINHA ALTERADA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

// Repare que estou fazendo uma instancia de EspacoTokenizer()

txtMultiAutoComplete.setTokenizer(new EspacoTokenizer());

Page 65: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

ListView

• Componente simples e de fácil manipulação exibe uma coluna única, geralmente 6 itens por tela

• Para usar, basta colar um componente na tela e programar os eventos e a carga de seus dados.

65

Page 66: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Código

• Carregando com dados já conhecidos:

66

private String[] lista = { "primeiro", "segundo", "terceiro", "quarto","quinto", "sexto" };

lstV = (ListView) this.findViewById(R.id.listView1); // usando o adaptador padrao lstV.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, lista));

Page 67: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Código

• Carregando com dados a serem obtidos:

67

lstV = (ListView) this.findViewById(R.id.listView1); // criando um adapter ArrayAdapter<String> array = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1); // usando o adaptador padrao lstV.setAdapter(array); // carregando com os dados array.add("Opcao 1"); array.add("Opcao 2"); array.add("Opcao 3"); array.add("Opcao 4");

Page 68: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Código dos eventos

68

lstV.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { if (lstV.getSelectedItem() != null) {

AlertDialog.Builder dialogo = new AlertDialog.Builder(ListActivity.this); dialogo.setTitle("Contato selecionado"); dialogo.setMessage(lstV.getSelectedItem().toString()); dialogo.setNeutralButton("OK", null); dialogo.show();

} } });

Page 69: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Código dos eventos

69

lstV.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub Toast.makeText(ListActivity.this, lstV.getSelectedItem().toString(), Toast.LENGTH_SHORT) $ .show(); } @Override public void onNothingSelected(AdapterView<?> arg0) { // TODO Auto-generated method stub Toast.makeText(ListActivity.this, "Selecione uma opção!", Toast.LENGTH_SHORT).show(); } });

Page 70: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Exercício

• Crie uma activity para exibir uma ListView

70

Page 71: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

ListView para seleção múltipla

71

// usando multipla escolha ArrayAdapter<String> array = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice); // precisa informar que a escolha é múltipla lstV.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); if (lstV.getChoiceMode()==ListView.CHOICE_MODE_MULTIPLE) { lista_ItemClick(v, pos); } private void lista_ItemClick(View v, int pos) { String word = ( (lstV.isItemChecked (pos)) ? "selecionada" : "desselecionada"); Toast.makeText(ListActivity.this, "Opção "+word+": " + lstV.getItemAtPosition(pos), 300).show(); }

Page 72: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

ExpandableListView

• Listas com sublistas;

• Para usá-la precisamos criar um Adapter para fornecer os dados para a Lista

o Lembram-se do ListView?

o Pois é, precisamos de um Adapter que forneça os elementos raízes e os filhos.

72

// criando um adapter ArrayAdapter<String> array = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1); // usando o adaptador padrao lstV.setAdapter(array);

Page 73: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

MyAdapter

73

public class MyAdapter extends BaseExpandableListAdapter { private String[] groups = { "Cara Feias", "Caras Pintadas" }; private String[][] caras = { { "Ze", "Juca", "Cido", "Joca" }, { "Leo", "Fefa", "Cuca" } }; public ExpandListActivity main; // construtor public MyAdapter(ExpandListActivity main) { this.main = main; } // Retorna um elemento da matriz dado o grupo e a posição do filho @Override public Object getChild(int groupPosition, int childPosition) { return caras[groupPosition][childPosition]; }

Page 74: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

MyAdapter

74

@Override public boolean hasStableIds() { return true; } @Override // Todos podem ser selecionados public boolean isChildSelectable(int groupPosition, int childPosition) { return true; }

Page 75: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

MyAdapter

75

// Retorna uma TextView para montagem da lista private TextView getGenericView() { // LayoutParams é um objeto utilizado para passar parâmetros para o layout // MATCH_PARENT é o tamanho do elemento, utilizado a partir da API // vamos usar tamanho 25, mais lembre-se que quanto maior, lista menos // elementos quanto menor, fica mais difícil selecionar AbsListView.LayoutParams lp = new AbsListView.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, 25); // Cria a TextView para a Activity e passa os parametros TextView textView = new TextView(main); textView.setLayoutParams(lp); // Vamos centralizar o texto textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT); // dar 5 pixels para a esquerda para não colar na tela textView.setPadding(5, 0, 0, 0); return textView; }

Page 76: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

MyAdapter

76

@Override // retorna o nro de filho no grupo public int getChildrenCount(int groupPosition) { return caras[groupPosition].length; } @Override // Retorna um grupo dado sua posição no array public Object getGroup(int groupPosition) { return groups[groupPosition]; } @Override // Retorna o numero de grupos existentes no array de grupos public int getGroupCount() { return groups.length; } @Override // Retorna o numero da posição do grupo public long getGroupId(int groupPosition) { return groupPosition; }

Page 77: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

MyAdapter

77

// Retorna uma View para o grupo, vimos que existe o getChildView // esse método faz a mesma coisa porem par grupos, você pode // querer ter um layout diferente para grupo public View getGroupView(int groupPosition, boolean isExpanded,

View convertView, ViewGroup parent) { TextView textView = getGenericView(); // Para manter o layout diferente vou exibir o número de filhos textView.setText( getGroup(groupPosition).toString() + " (" + getChildrenCount(groupPosition) + ")"); // Será vermelho textView.setTextColor(Color.RED); textView.setTextSize(14); // Terá a fonte em negrito textView.setTypeface(Typeface.DEFAULT, Typeface.BOLD); return textView;

}

Page 78: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

MyAdapter

78

// Retorna uma View para o grupo, vimos que existe o getChildView // esse método faz a mesma coisa porem par grupos, você pode // querer ter um layout diferente para grupo public View getGroupView(int groupPosition, boolean isExpanded,

View convertView, ViewGroup parent) { TextView textView = getGenericView(); // Para manter o layout diferente vou exibir o número de filhos textView.setText( getGroup(groupPosition).toString() + " (" + getChildrenCount(groupPosition) + ")"); // Será vermelho textView.setTextColor(Color.RED); textView.setTextSize(14); // Terá a fonte em negrito textView.setTypeface(Typeface.DEFAULT, Typeface.BOLD); return textView;

}

Page 79: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Exercício

• Altere o Exercício de ListView para usar uma ExpandableListView

79

Page 80: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

GridView • Exibe Views na forma de grade

• Todas as colunas têm a mesma largura

• Faz scrolling do conteúdo

• Atributos

80

Page 81: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

WebView e WebSettings • WebView

o Apresenta uma página de web

o Usa o mesmo componente que o navegador do celular

o Necessário permissão android.permission.INTERNET

• WebSettings

o Permite configurar o WebView

Permite JavaScript, Salvar senhas, etc.

• Métodos principais

81

Page 82: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Exercício - WebView • Criar um projeto que abra uma página da web

o Dentro do método onCreate() da Activity

82

WebView web = new WebView(this);

WebSettings webSettings = web.getSettings();

webSettings.setSavePassword(false);

webSettings.setSaveFormData(false);

webSettings.setJavaScriptEnabled(true);

webSettings.setSupportZoom(false);

web.loadUrl("http://www.google.com.br");

setContentView(web);

Page 83: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Exercício - WebView • Altere o AndroidManifest.xml

83

<?xml version="1.0" encoding="utf-8"?> <manifest ... > <application ... > <activity ... > ... </activity> </application> <uses-permission android:name="android.permission.INTERNET" /> </manifest>

Page 84: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Gallery e ImageSwitcher

• Gallery

o Mostra lista de componentes com rolagem horizontal

o Mantém o componente selecionado sempre no centro

• ImageSwitcher

o Exibe imagens e cria efeitos ao alterná-las

84

Page 85: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

ProgressBar • Exibe um indicador de progresso de uma operação

• Estilos como percentual ou indeterminado

• Estilos (atributo style no XML):

85

?android:progressBarStyle (padrão) Indeterminado circular de tamanho médio

?android:progressBarStyleSmall Indeterminado circular de tamanho pequeno

?android:progressBarStyleLarge Indeterminado circular de tamanho grande

?android:progressBarStyleHorizontal Barra horizontal indeterminado ou com percentual

Page 86: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

ProgressBar • Métodos

86

setProgress(int) Determina o nível de progresso para uma barra percentual

setSecondaryProgress(int) Determina o nível secundário de progresso para uma barra

percentual

boolean isIndeterminate() Retorna true se for indeterminado

Page 87: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

ProgressBar - Exemplo <ProgressBar style="?android:progressBarStyleSmall" android:layout_width="wrap_content“ android:layout_height="wrap_content" /> <ProgressBar style="?android:progressBarStyle" android:layout_width="wrap_content“ android:layout_height="wrap_content" /> <ProgressBar style="?android:progressBarStyleLarge" android:layout_width="wrap_content“ android:layout_height="wrap_content" />

87

Page 88: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

ProgressBar - Exemplo <ProgressBar style="?android:progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:indeterminate="true" /> <ProgressBar style="?android:progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:indeterminate="false" android:progress="45" /> <ProgressBar style="?android:progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:indeterminate="false" android:progress="45" android:secondaryProgress="80" />

88

Page 89: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Toast • Exibição de alertas por tempo determinado

• Sem interação com usuário

• View personalizada Toast toast = new Toast(this);

toast.setDuration(Toast.LENGTH_LONG);

toast.setView(view);

toast.show();

• Apenas mensagem de texto Toast.makeText(this, “Mensagem”, Toast.LENGTH_SHORT).show();

89

Page 90: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

Dialogs • Usado para abrir janelas na tela

• Recomendado usar os métodos a seguir para que a Activity gerencie o ciclo de vida do Dialog.

90

boolean showDialog(int id, Bundle) Tenta mostrar o Dialog para o id chamando onCreateDialog() se

necessário, e em seguida onPrepareDialog(). Retorna true em caso

de sucesso.

void dismissDialog(int id) Fecha o Dialog criado por showDialog() com o id especificado. Se

nenhum Dialog com o id tiver sido mostrado lança

IllegalArgumentException.

void removeDialog(int id) Remove qualquer referência para o Dialog especificado. Caso esteja

sendo exibido, ele é fechado antes.

Dialog onCreateDialog (id, Bundle) Callback chamado quando um Dialog deve ser criado para o id

especificado. Implementado pelo desenvolver.

void onPrepareDialog(id, Dialog, Bundle) Callback que permite que o Dialog seja preparado antes de ser

apresentado. Por exemplo, configurar alguma varíavel.

Page 91: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

ProgressDialog • Janela para mostrar o progresso de uma operação

• Como usar sem os métodos anteriores

o Mostrar o Dialog

dialog = ProgressDialog.show(contexto, titulo, msg, bool indet);

indet = se é indeterminado ou não (percentual)

o Feche o Dialog, quando concluir

dialog.dismiss();

o Alterar o progresso (se indet = true)

dialog.setProgress(int v)

v entre 0 e 10000

91

Page 92: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

AlertDialog • Exibe um alerta ao usuário

• Conteúdo e botões de escolha personalizados

• Classe AlertDialog.Builder para construir alertas

92

Page 93: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

AlertDialog

93

setIcon(int resId) Determina o ícone a ser mostrado

setTitle(String) Determina o título do alerta

setMessage(String) Mensagem a ser mostrada no interior do alerta

setPositiveButton(String, listener) Texto do botão positivo (Sim, Yes, Ok, etc)

setNegativeButton(String, listener) Texto do botão negativo (Não, No, etc)

setItems(String [], listener) Items a serem mostrados para usuário selecionar

setSingleChoiceItems(String [],

int checkedItem, listener)

Determina lista de RadioButtons a serem mostrados ao

usuário

setCancelable(boolean) Alerta cancelável ou não. Cancelável significa que

usuário não pode fechar com botão voltar.

show() Exibe o alerta para o usuário

cancel() Cancela o alerta

Nota: listener é uma instância de DialogInterface.OnClickListener

Page 94: Android - FACOMbacala/ANDROID/5 - View.pdf• O evento do Spinner só deve ser usado quando a ação do usuário sobre ele influenciar a tela ou os atributos da classe. • Se for

AlertDialog.Builder builder = new AlertDialog.Builder(this);

builder.setMessage("Are you sure you want to exit?");

builder.setCancelable(false);

builder.setPositiveButton("Yes", ...);

builder.setNegativeButton("No“, ...);

AlertDialog alert = builder.create();

AlertDialog - Exemplos

94

CharSequence[] items = {"Red", "Green", "Blue"};

AlertDialog.Builder builder = new AlertDialog.Builder(this);

builder.setTitle("Pick a color");

builder.setItems(items,

new DialogInterface.OnClickListener() { ... } );

builder.show();