Android. Interfaces: widgets



Documentos relacionados
Interfaces no Android : widgets. Continuação

Programação para Android. Aula 05: Estilos e temas; galeria de imagens

Programa de Dispositivos Móveis

Android Layout Manager. Ivan Nicoli

Prof. Jhonatan Fernando

Módulo 4 - Interface Gráfica Gerenciadores de Layout. Programação Orientada a Objetos Prof. Rone Ilídio - UFSJ

INTRODUÇÃO À PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS. ADS 6º Período

Desenvolvimento com Android Studio. Aula 02 Widgets, Manipulação de Dados e Programação de Eventos

Programação para Android. Aula 06: Activity, menus e action bar

Programação para Android. Aula 08: Persistência de dados SQL

Programação para Android

Desenvolvimento com Android Studio Aula 01 Instalação e Configuração do Ambiente de Desenvolvimento, Estrutura de um projeto Android

Desenvolvimento para Android Prá9ca 2. Prof. Markus Endler

Interfaces Gráficas parte 3

Google Android. Componentes Gráficos

Programação para Dispositivos Móveis

( TIAGO DOS SANTOS MENDES ) PROGRAMAÇÃO DISPOSITIVOS MOVEIS ANDROID STUDIO

Programação para Android. Aula 10: Acesso a câmera, sms e recursos do aparelho

INTRODUÇÃO À PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS. ADS 6º Período

Introdução ao Android. SECAP 2014 Prof. Rone Ilídio - UFSJ

Programação para a Plataforma Android Aula 7. Mul$mídia

Programação de Dispositivos Móveis

Introdução ao Android. Programação Orientada a Objetos Prof. Rone Ilídio - UFSJ

Desenvolvimento Android.

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS

ANDROID APPLICATION PROJECT

Apresentação de um Processo Cria4vo de Desenvolvimento de uma App Android. Realização de Dinâmica Hands- On para Construção de uma App Android

Tutorial Plone 4. Manutenção de Sites. Universidade Federal de São Carlos Departamento de Sistemas Web Todos os direitos reservados

Introdução ao Android

Procedimentos para Reinstalação do Sisloc

Módulo 2 - Novas Activities Android. Programação Orientada a Objetos Prof. Rone Ilídio - UFSJ

CURSOS ANDROID. Prof: Igor Portela

ANDRÉ APARECIDO DA SILVA APOSTILA BÁSICA SOBRE O POWERPOINT 2007

Revisão: Introdução. - Integração com o AutoManager; 1 Atualização de versão do banco de dados PostgreSQL

INTRODUÇÃO À PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS. ADS 6º Período

Questão Essência do Excel

Despachante Express - Software para o despachante documentalista veicular DESPACHANTE EXPRESS MANUAL DO USUÁRIO VERSÃO 1.1

Manual de Utilização COPAMAIL. Zimbra Versão 8.0.2

Barra de ferramentas padrão. Barra de formatação. Barra de desenho Painel de Tarefas

AULA 2. Minicurso PET-EE UFRN

Programação para Dispositivos Móveis

MANUAL DE INSTALAÇÃO E CONFIGURAÇÃO. Motor Periférico Versão 8.0

Bem- Vindo ao manual de instruções do ECO Editor de COnteúdo.

Microsoft Office PowerPoint 2007

USANDO O ROUNDCUBE WEBMAIL

Programação para Dispositivos Móveis

LIÇÃO 1 - USANDO O GRAVADOR DE MACROS

CRIANDO BANCOS DE DADOS NO SQL SERVER 2008 R2 COM O SQL SERVER MANAGEMENT STUDIO

Curso de Android. Fevereiro de Cristiano Expedito Ribeiro Fabrício Firmino de Faria

Procedimentos para Instalação do Sisloc

Guia de utilização versão Sou Empresa SISCONV AREF

Android Básico Hello World!

Word 1 - Introdução Principais recursos do word A janela de documento Tela principal

Vamos criar uma nova Página chamada Serviços. Clique em Adicionar Nova.

Google Drive. Passos. Configurando o Google Drive

API's e Aplicações para Android

Manual do Usuário Android Neocontrol

Aula 01 - Formatações prontas e condicionais. Aula 01 - Formatações prontas e condicionais. Sumário. Formatar como Tabela

Como já foi dito anteriormente o Excel possui recursos que permitem alterar a aparência de nossas planilhas.

MANUAL GDS TOUCH. Versão: 1.0 Direitos reservados.

Programa de Dispositivos Móveis

FCT Faculdade de Ciências e Tecnologia Serviço Técnico de Informática STI SGCD Sistema Gerenciador de Conteúdos Dinâmicos

ÍNDICE... 2 INTRODUÇÃO... 4

Sumário 1. SOBRE O NFGoiana DESKTOP Apresentação Informações do sistema Acessando o NFGoiana Desktop

Manual Simulador de Loja

Produção de tutoriais. Suellem Oliveira

Log, Ciclo de Vida e Diálogos. Prof. Fellipe Aleixo (fellipe.aleixo@ifrn.edu.br)

ALBUM DE FOTOGRAFIAS NO POWER POINT

Vamos criar uma nova Página chamada Serviços. Clique em Adicionar Nova.

Fluxo de trabalho do Capture Pro Software: Indexação de OCR e separação de documentos de código de correção

Views Interface Gráfica

1 UNIT Universidade do Trabalhador Dr. Abel dos Santos Nunes

MANUAL EXPORTAÇÃO IMPORTAÇÃO

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS

Microsoft Office Outlook Web Access ABYARAIMOVEIS.COM.BR

Aula Au 3 la 7 Windows-Internet

Novell. Novell Teaming 1.0. novdocx (pt-br) 6 April 2007 EXPLORAR O PORTLET BEM-VINDO DESCUBRA SEU CAMINHO USANDO O NOVELL TEAMING NAVIGATOR

Editando textos no Siga-Doc

SUMÁRIO Acesso ao sistema... 2 Atendente... 3

Desenvolvimento de aplicações na plataforma Google Android

Análise de Dados do Financeiro

APOSTILA DE EXEMPLO. (Esta é só uma reprodução parcial do conteúdo)

Manual de configuração do sistema

Display de 7. PdP. Autor: Tiago Lone Nível: Básico Criação: 16/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos

Como funciona? SUMÁRIO

Universidade Federal do Mato Grosso - STI-CAE. Índice

Série ArcGIS Online I. Aprenda em 20. Módulo 4. Configure pop-ups.

Android Core. Felipe Silveira felipesilveira.com.br. Aula 6

MANUAL BACKUP XDENTAL 2012

DOCUMENTAÇÃO DO FRAMEWORK - versão 2.0

Fluxo de trabalho do Capture Pro Software: Indexação de código de barras e separação de documentos

Desenvolvimento para Android Prá3ca 3. Prof. Markus Endler

Android Banco de Dados. Ivan Nicoli

Associação Educacional Dom Bosco Curso de Engenharia 1º ano

Banco de Dados Microsoft Access: Criar tabelas. Vitor Valerio de Souza Campos

TUTORIAL DO ACCESS PASSO A PASSO. I. Criar um Novo Banco de Dados. Passos: 1. Abrir o Access 2. Clicar em Criar um novo arquivo

Tutorial Administrativo (Backoffice)

Table of Contents. PowerPoint XP

Transcrição:

Android Interfaces: widgets

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

Vida de uma Activity 3

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

Tempo de visibilidade de uma Activity 5

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

Resumindo... 7

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

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

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

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 o Recomenda-se não alterar esta classe manualmente é utilizada para facilitar a obtenção dos componentes ou recursos apenas informando o seu nome. 11

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 o o drawable: deve conter todos os recursos de imagens (PNG e JPG) utilizados na aplicação. layout: contém as definições dos layouts utilizados na aplicação que nada mais são do que arquivos no formato XML. values: contém valores estáticos (strings, por exemplo) que podem ser carregados de um arquivo XML. 12

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

Widgets O pacote android.widget reúne elementos gráficos para serem empregados para interação homemmá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

Interface de Usuário Esta UI contém: - um container Name; - um container Address; - um container Parente; 15

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

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

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

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

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

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

Exercício 22

Exercício 23

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

Solução 25

RadioButton e RadioGroup RadioButton : botão de dois estados: marcado ou desmarcado. o o Quando está desmarcado, o usuário pode pressionar e marcar. 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 o Quando o usuário marca um RadioButton, o RadioGroup automaticamente desmarca os demais. 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

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

Lay-out do formulário 28

Código no oncreate // 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); 29

Tratador de eventos /** * 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(); 30

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

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

Código do oncreate 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); 33

Tratador do evento Click /** * */ 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(); 34

Spinner Este componente possui um nome diferente em cada tecnologia: o o o JComboBox DropDownList 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

Exemplo Neste projeto o usuário deverá escolher uma palavra de uma lista de palavras. // 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); } 36

Código /** * 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"}; 37

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

DatePicker o o Data e Hora Componente destinado a edição de uma data contendo Ano, Mês e Dia. Possui botões grandes, visto que nesta plataforma não seu usa as famosas canetinhas e sim as pontas dos dedos. 39

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

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

Código // 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); } }); } 42

Código /** * 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(); }}); } 43

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

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

Código 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; 46

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

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 o o drawable-hdpi : imagens de alta densidade, drawable-mdpi : de média densidade e drawable-ldpi de baixa densidade. Então nossas três versões de logo ficarão em: o o o /res/drawable-ldpi/meulogo.png /res/drawable-mdpi/meulogo.png /res/drawable-hdpi/meulogo.png 48

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

ImageView Altere a densidade do dispositivo: 50

ImageView Adicione um botão para trocar a imagem. 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); } 51

ImageView Para usar uma imagem do sdcard 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); } } } 52

ImageButton ImageButton realmente é uma junção de botão e imagem, o terá bordas como um botão e uma imagem dentro, 53

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

AutoComplete 55

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

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

Exercício: Lay-out <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" /> 58

Código 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); 59

Código // 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" }; 60

MultiAutoComplete 61

Crie EspaçoTokenizer 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); } 62

Espaço Tokenizer } // 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 + " "; } 63

Código da Activity 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()); 64

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

Código Carregando com dados já conhecidos: 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)); 66

Código Carregando com dados a serem obtidos: 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"); 67

Código dos eventos 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(); } }); } 68

Código dos eventos 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(); } }); 69

Exercício Crie uma activity para exibir uma ListView 70

ListView para seleção múltipla // 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(); } 71

ExpandableListView Listas com sublistas; Para usá-la precisamos criar um Adapter para fornecer os dados para a Lista o Lembram-se do ListView? // criando um adapter ArrayAdapter<String> array = new ArrayAdapter<String>(this, android.r.layout.simple_list_item_1); // usando o adaptador padrao lstv.setadapter(array); o Pois é, precisamos de um Adapter que forneça os elementos raízes e os filhos. 72

MyAdapter 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]; } 73

@Override public boolean hasstableids() { return true; } MyAdapter @Override // Todos podem ser selecionados public boolean ischildselectable(int groupposition, int childposition) { return true; } 74

MyAdapter // 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; } 75

MyAdapter @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; } 76

MyAdapter // 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; } 77

MyAdapter // 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; } 78

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

GridView Exibe Views na forma de grade Todas as colunas têm a mesma largura Faz scrolling do conteúdo Atributos 80

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

Exercício - WebView Criar um projeto que abra uma página da web o Dentro do método oncreate() da Activity 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); 82

Exercício - WebView Altere o AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest... > <application... > <activity... >... </activity> </application> <uses-permission android:name="android.permission.internet" /> </manifest> 83

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

ProgressBar Exibe um indicador de progresso de uma operação Estilos como percentual ou indeterminado Estilos (atributo style no XML):?android:progressBarStyle?android:progressBarStyleSmall?android:progressBarStyleLarge?android:progressBarStyleHorizontal (padrão) Indeterminado circular de tamanho médio Indeterminado circular de tamanho pequeno Indeterminado circular de tamanho grande Barra horizontal indeterminado ou com percentual 85

ProgressBar Métodos setprogress(int) Determina o nível de progresso para uma barra percentual setsecondaryprogress(int) boolean isindeterminate() Determina o nível secundário de progresso para uma barra percentual Retorna true se for indeterminado 86

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

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

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

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. boolean showdialog(int id, Bundle) void dismissdialog(int id) void removedialog(int id) Dialog oncreatedialog (id, Bundle) Tenta mostrar o Dialog para o id chamando oncreatedialog() se necessário, e em seguida onpreparedialog(). Retorna true em caso de sucesso. Fecha o Dialog criado por showdialog() com o id especificado. Se nenhum Dialog com o id tiver sido mostrado lança IllegalArgumentException. Remove qualquer referência para o Dialog especificado. Caso esteja sendo exibido, ele é fechado antes. 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. 90

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

AlertDialog Exibe um alerta ao usuário Conteúdo e botões de escolha personalizados Classe AlertDialog.Builder para construir alertas 92

AlertDialog seticon(int resid) settitle(string) setmessage(string) setpositivebutton(string, listener) setnegativebutton(string, listener) Determina o ícone a ser mostrado Determina o título do alerta Mensagem a ser mostrada no interior do alerta Texto do botão positivo (Sim, Yes, Ok, etc) Texto do botão negativo (Não, No, etc) setitems(string [], listener) setsinglechoiceitems(string [], int checkeditem, listener) setcancelable(boolean) show() cancel() Items a serem mostrados para usuário selecionar Determina lista de RadioButtons a serem mostrados ao usuário Alerta cancelável ou não. Cancelável significa que usuário não pode fechar com botão voltar. Exibe o alerta para o usuário Cancela o alerta Nota: listener é uma instância de DialogInterface.OnClickListener 93

AlertDialog - Exemplos 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(); 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(); 94