Baixe o app para aproveitar ainda mais
Prévia do material em texto
Profº. Luiz Carlos Querino Filho É vedada, terminantemente, a cópia do material didático sob qualquer forma, o seu fornecimento para fotocópia ou gravação, para alunos ou terceiros, bem como o seu fornecimento para divulgação em locais públicos, telessalas ou qualquer outra forma de divulgação pública, sob pena de responsabilização civil e criminal. SUMÁRIO APRESENTAÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Módulo 1 – Introdução ao Android e XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Aula 1 – Fundamentos do Sistema Operacional Android . . . . . . . . . . . . . . . . . . . . . . . 6 1.1. Características do Sistema Operacional Android . . . . . . . . . . . . . . . . . . . . . . . .6 1 .2 . Os Dispositivos Móveis Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Aula 2 – Introdução ao XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.1. Conceitos básicos de XML (eXtensible Markup Language). . . . . . . . . . . . . . .11 2.2. Manipulação de documentos XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12 2.3. APIs: DOM, SAX e TrAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14 Módulo 2 – Ambiente de Desenvolvimento Android . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Aula 3 – Android Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.1. Baixando e instalando o Android Studio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16 3.2. Primeiro contato com o Android Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.3. Seu primeiro aplicativo Android. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24 3.4. Criando um dispositivo virtual Android (AVD) . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.5. Escrevendo o código do seu primeiro aplicativo. . . . . . . . . . . . . . . . . . . . . . . 33 Módulo 3 – View e Activity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Aula 4 – Widgets Básicos e Definição de View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 4.1. Widgets: os componentes de uma tela Android. . . . . . . . . . . . . . . . . . . . . . . . 39 4.2. Introdução ao Activity: a classe Java controladora de uma tela . . . . . . . . . .41 4.3. Mais Widgets: EditText, ImageView e Toast . . . . . . . . . . . . . . . . . . . . . . . . . . . .42 Aula 5 – Aprofundando o conhecimento sobre a classe Activity . . . . . . . . . . . . . . . . 45 5.1. O ciclo de vida de uma Activity: onCreate, onDestroy etc. . . . . . . . . . . . . . . . 45 5.2. Eventos de clique em botões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 5.3. ListActivity = Activity + ListView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47 Módulo 4 – Layouts e Intents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Aula 6 – Organizando a tela com gerenciadores de layout . . . . . . . . . . . . . . . . . . . . . 54 6.1. RelativeLayout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 6.2. LinearLayout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 6.3. Menus e Caixas de Diálogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 Aula 7 – Intents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 7.1. Definição da classe Intent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 7.2. Criando e abrindo uma nova tela com Intent . . . . . . . . . . . . . . . . . . . . . . . . . . 64 7.3. Passando valores para uma nova tela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Módulo 5 – Banco de Dados em Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Aula 8 – Banco de Dados em Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 8.1. Banco de Dados SQLite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 8.2. Criação do banco de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 8.3. Criação da classe DAO para acesso aos dados . . . . . . . . . . . . . . . . . . . . . . . 70 8.4. Incluindo, excluindo e exibindo registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Módulo 6 – Visão Geral de Recursos do SDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 Aula 9 – GPS, WebServices, Câmera e Áudio/Vídeo . . . . . . . . . . . . . . . . . . . . . . . . . . 76 9.1. Acessando longitude, latitude e altitude por meio do GPS do aparelho . . . .76 9.2. Consumindo Web Services RESTful . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 9.3. Utilizando a câmera para fotos e vídeo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 9.4. Reproduzindo arquivos de áudio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91 Considerações Finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 Glossário . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 Referências bibliográficas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 Pág. 5 de 95 APRESENTAÇÃO Bem-vindo(a) à nossa disciplina, caro(a) aluno(a). Meu nome é Luiz, mas sou mais conhecido pelo meu sobrenome: Querino. Vou apresentar a você os conceitos (e, é claro, as práticas) essenciais para criação de aplicativos móveis (os famosos apps) para aparelhos equipados com o sistema operacional Android. Certamente você já conhece os fundamentos de programação na linguagem Java, que abrange a criação dos tradicionais aplicativos desktop (que são executados nos computadores de mesa) e também dos aplicativos web, feitos para serem executados pela Internet, usando um navegador. Estamos vivendo uma nova revolução na computação pessoal, ocasionada pelo aparecimento dos smartphones e tablets. As pessoas passaram a contar com esses tipos de aparelho no seu dia a dia, passando literalmente a “depender” deles! Isso abriu as portas dos desenvolvedores de software para um novo e empolgante segmento: a criação dos apps, os pequenos (mas poderosos) programas para dispositivos móveis. Dentre os diversos aparelhos existentes no mercado, aqueles que executam o sistema operacional Android se destacam como os mais vendidos, justamente por serem acessíveis e estarem disponíveis em diversas configurações. Por isso, o Android é hoje o líder isolado no mercado de sistemas operacionais para dispositivos móveis (seguido pelo iOS da Apple em segundo lugar, e pelo Windows Phone da Microsoft,que ainda possui uma fatia bem pequena desse novo e disputadíssimo mercado). O sistema operacional Android é desenvolvido primariamente pela Google, a gigante mundial que começou como um mecanismo de busca e hoje está presente em diversas áreas da TI. Desde o início, a Google tinha a intenção de popularizar o sistema operacional, por isso, ele está disponível em aparelhos de vários fabricantes, sendo que estes também participam ativamente do processo de desenvolvimento e atualização do Android. Uma das medidas usadas pela Google para popularizar o Android foi ter optado pelo uso da linguagem Java para o desenvolvimento de aplicativos. Como Java já era uma linguagem amplamente conhecida e utilizada por milhões de desenvolvedores, estes poderiam fácil e rapidamente começar a desenvolver apps para Android! Pág. 6 de 95 E é justamente aí que nós entramos! Como você já é um programador Java, nada melhor que acrescentar agora o desenvolvimento de aplicativos móveis Android no seu portfólio! Prepare-se, então, para entrar de cabeça na onda do momento: o desenvolvimento de apps! Luiz Carlos Querino Filho MÓDULO 1 – INTRODUÇÃO AO ANDROID E XML Este primeiro módulo trata de uma rápida introdução ao sistema operacional Android, seus aplicativos e o mercado de apps. Em seguida, são apresentados alguns conceitos básicos da linguagem XML, amplamente usados nos projetos de aplicativos Android. AULA 1 – FUNDAMENTOS DO SISTEMA OPERACIONAL ANDROID 1.1. Características do Sistema Operacional Android De acordo com Querino (2013), a origem do sistema operacional Android remonta a uma empresa criada em 2003 no Vale do Silício, Califórnia (EUA), denominada Android Inc., por Andy Rubin, Rich Miner, Nick Sears e Chris White. Inicialmente, a empresa parecia mais uma dentre as centenas de startups criadas naquela região, com ideias mirabolantes de desenvolvimento de aplicações móveis e uma perspectiva de ser, quem sabe, a próxima Apple ou a próxima Google. E foi justamente a Google que começou a prestar atenção na pequena empresa e seu potencial de inovação tecnológica. Em 2005, reconhecendo a qualidade daquilo que estava sendo criado na Android Inc., a Google comprou a empresa e deu início à criação de um novo sistema operacional para dispositivos móveis (celulares, naquela época), usando como base o código-fonte do Linux. No dia 5 de novembro de 2007, a Google fez dois anúncios importantes: o primeiro, a formação do grupo Open Handset Alliance, encabeçado por ela e formado por diversas empresas do setor móvel, como Samsung, Sony e HTC; o segundo, anunciando o primeiro produto resultante do trabalho desse grupo – o sistema operacional Android (QUERINO FILHO, 2013). O sistema passou, então, a ser testado e aprimorado, até que em setembro de 2008 foi lançado o Android 1.0 – a primeira versão disponível comercialmente. Finalmente, o mundo teria acesso a aparelhos equipados com o hoje já conhecido “robozinho verde” (figura 1). Pág. 7 de 95 FIGURA 1 – Logo da Plataforma Android Fonte: <https://commons.wikimedia.org/wiki/File:Android_robot.svg> FIGURA 2 – Tela do Android 6.0.1 Marshmallow Fonte: < https://pt.wikipedia.org/wiki/Android_Marshmallow#/media/File:Android_6.0-en.png > Desde esse primeiro lançamento, muita coisa mudou. O Android assumiu a liderança do mercado de sistemas operacionais para dispositivos móveis, superando o iOS (que equipa o iPhone e o iPad da Apple), então líder até sua chegada, e hoje está presente em centenas de aparelhos dos mais diversos fabricantes. No momento da finalização deste material, a versão oficial mais recente do Android era a 6.0.1, denominada Marshmallow (figura 2). É uma tradição da Google dar um codinome para cada versão do Android com o nome de um doce, sempre em ordem alfabética. Por exemplo, a primeira versão a ganhar esse tipo de “apelido” Pág. 8 de 95 foi a 1.5, chamada Cupcake. Em seguida, vieram Donut, Eclair, Froyo, Gingerbread, Honeycomb, Ice Crem Sandwich, Jelly Bean, KitKat, Lollipop e, finalmente, Marshmallow. A próxima versão já tem codinome anunciado: Nougat, conhecido no Brasil popularmente como “torrone”. Para cada versão, também é criado um desenho estilizado do robozinho verde como a sobremesa “da vez” (veja a figura 3). FIGURA 3 – Codinomes das versões do Android Fonte: <http://techtoward.com/wp-content/uploads/2014/02/Android-Versions-History.jpg> 1.2. Os Dispositivos Móveis Android Existem hoje no mercado centenas de smartphones e tablets equipados com o sistema operacional Android, de modelos muito simples e mais acessíveis até os mais caros e sofisticados. Fabricantes conhecidos como Samsung, Motorola, HTC e LG trazem ao usuário várias opções, com diferentes capacidades de processamento, memória e tamanho de tela. Isso proporciona ao usuário uma grande variedade de escolha, mas traz também uma nova preocupação ao desenvolvedor: como compatibilizar seu app para todas essas variedades de aparelhos? Apesar de o sistema operacional ser o mesmo nos aparelhos que divulgam o fato de serem “Android”, há algumas peculiaridades a serem consideradas, segundo Querino Filho (2013): • A diversidade de versões do Android: é possível encontrar hoje no mercado celulares com versões mais antigas (como 2.2 e 2.3) até as versões mais novas (como 6.0.1). Isso ocasiona variações significativas entre elas. • Customizações ao Android original adicionadas pelos fabricantes: a natureza “livre e aberta” do Android possibilita aos fabricantes de aparelho fazerem pequenas (mas impactantes) mudanças no SO, de forma que ele aproveite ao máximo o recurso dos aparelhos. Pág. 9 de 95 • Variações na configuração (hardware) de cada aparelho: como já citado, cada modelo tem uma configuração específica. Por exemplo, o tamanho de uma tela pode variar de cerca de 3 a 7 polegadas em um smartphone e até mesmo mais de 10 polegadas em um tablet. Como podemos ver, a versatilidade do Android é uma faca de dois gumes: dá ao usuário mais opções de escolha de um lado, mas dificulta um pouco de outro – o “nosso lado” como desenvolvedores, pois temos de preparar o aplicativo de forma que execute corretamente em várias configurações. Manter a compatibilidade com o vasto universo de aparelhos Android é tão importante que a própria Google coloca no site oficial dos desenvolvedores – <http://developer.android.com/index. html> – uma estatística sobre a diversidade atual de versões (figura 4). FIGURA 4 – Estatística sobre as versões do Android em uso, em Agosto de 2016 Fonte: <http://developer.android.com/about/dashboards/index.html> As estatísticas da figura 4 são geradas com base nos aparelhos com Android acessando a Google Play Store. Podemos ver que, embora cerca de 80% dos usuários já estejam usando as versões mais recentes (da 4.4 em diante), uma fatia importante (cerca de 20%) ainda usa versões mais antigas. Esse percentual tende a ser ainda maior em países com população de baixa renda, em que celulares mais simples são mais vendidos. O que isso significa para nós, desenvolvedores? Pág. 10 de 95 Significa que, ao criarmos um app para Android, devemos nos assegurar que ele executará na maior quantidade possível de versões, para que possamos alcançar mais “clientes”. E para que isso aconteça, são necessários alguns cuidados na hora de criar seu app (falaremos mais sobre isso quando começarmos a criar os programas). Outro fator a ser considerado: o tamanho e a resolução das telas. Veja o gráfico da figura 5. Os dados e gráficos da figura 5, também gerados com base nos dispositivos que acessam a Google Play Store, mostram que há uma grande variedade de tamanhos de tela (e resoluções) nos aparelhos. Se o desenvolvedor não adequar seus apps para essas diferenças, poderá correr o risco de o seu aplicativo aparecer com a tela cortada, “bagunçada” ou exibindo gráficos com baixa qualidade. FIGURA 5 – Estatísticas sobre o tamanho e a resoluçãode tela em uso nos dispositivos Android, em Agosto de 2016 Fonte: <http://developer.android.com/about/dashboards/index.html> Pág. 11 de 95 CURIOSIDADE E QUANTO AO JAVA ME (ANTIGO J2ME)? Bem antes de o Android existir, a linguagem Java já se fazia presente nos dispositivos móveis, por meio do “J2ME”, hoje conhecido como Java ME (Mobile Edition). Mas não confunda os dois! O Android é um sistema operacional completo, desenvolvido por um grupo de empresas lideradas pela Google, cujos aplicativos são escritos em Java. Já o Java ME é uma versão compacta da máquina virtual Java padrão, e foi criado para executar em dispositivos embarcados, incluindo alguns tipos de celulares. O Android, visualmente mais rico e preparado para usar os recursos mais modernos dos smartphones, superou o Java ME como plataforma Java mais popular para dispositivos móveis, apesar de este último ainda marcar presença significativa em outros segmentos. Fonte: Querino Filho (2013) AULA 2 – INTRODUÇÃO AO XML Antes de começarmos a criar nossos programas Android, vamos fazer uma rápida introdução à linguagem XML. Como você verá durante a disciplina, esta linguagem é intensamente usada dentro do Android, principalmente para especificação de dados e da estrutura básica das telas dos aplicativos. 2.1. Conceitos básicos de XML (eXtensible Markup Language) Resumidamente falando, XML é uma linguagem usada para especificação de dados de uma maneira estruturada e significativa. De acordo com Fawcett e Quin (2012), o XML surgiu e ganhou popularidade como uma maneira eficiente de troca de dados entre dispositivos e plataformas distintas, de forma que estes dados pudessem ser entendidos por qualquer uma das partes envolvidas. Outra característica importante do XML é que essas “partes” citadas possam ser tanto máquinas quanto humanos; ou seja, dados em XML são estruturados de forma que possam ser criados e lidos (interpretados) por um software ou pela pessoa que criou e está usando o software. Sabemos que os computadores lidam com informações em bits (dígitos com valor zero ou um). Esse formato, denominado formato binário, é facilmente entendido por um computador, mas nem Pág. 12 de 95 tanto por um ser humano. Além disso, dados binários são codificados em uma forma específica de uma determinada arquitetura de computadores, o que dificulta ainda mais o uso destes dados por outro tipo de sistema. Já os arquivos em formato texto (também conhecidos pela extensão .TXT, usada em muitos destes arquivos) também podem ser processados e lidos facilmente por um computador (pois cada caractere corresponde a uma dada sequência de bits), trazendo a vantagem de poderem ser lidos também por seres humanos. Uma desvantagem do uso de arquivos de formato texto, no uso para transferência de dados, está na definição de uma sintaxe adequada para a formatação dos dados, os chamados metadados. A definição dos metadados pode variar muito, além de ocupar um espaço significativo dentro do arquivo. O XML veio para sanar os problemas inerentes aos formatos binário e texto! Segundo Fawcett e Quin (2012), tudo começou com a criação do padrão SGML-Standard Generalized Markup Language para facilitar a especificação dos metadados de um arquivo texto. O SGML, apesar de já ser um bom começo no caminho de uma padronização para troca de dados, ainda era complexo demais – da sua simplificação surgiu, em 1996, o XML. Foi um passo tão importante para a Internet que já nasceu como um padrão do World Wide Web Consortium (W3C), a entidade que controla os padrões usados na web. FIGURA 6 – World Wide Web Consortium Fonte: <http://www.pcmanias.com/wp-content/uploads/2014/10/w3c.jpg> 2.2. Manipulação de documentos XML Para melhor entender o funcionamento do XML, vamos começar com um exemplo de arquivo no formato texto apresentado no Quadro 1. Pág. 13 de 95 QUADRO 1 – Arquivo Texto Detergente Farinha de Trigo Sabão em Pó Olhando os dados do quadro 1, podemos deduzir que se trata de uma lista de produtos. Mas produtos do quê e de onde? Pode ser uma lista de compras de supermercado, um conjunto de produtos no estoque de uma empresa; poderíamos até mesmo complementar as linhas do arquivo com mais uma informação, como mostra o Quadro 2. QUADRO 2 – Arquivo Texto Modificado Detergente, 5 Farinha de Trigo, 2 Sabão em Pó, 4 Vemos agora que, após a descrição do produto, temos uma vírgula seguida de um número. O que significa este número? O preço de venda do produto? Ou sua quantidade de estoque? Não podemos saber ao certo, pois estão faltando os metadados, ou seja, os dados sobre os dados – as informações sobre o que está especificado em cada linha. Poderíamos transformar a listagem do Quadro 2 em um arquivo XML, em que tudo ficaria mais claro, como no Quadro 3. QUADRO 3 – Arquivo XML <estoque> <produto descricao=”Detergente”quantidade=”5” /> <produto descricao=”Farinha de Trigo”quantidade=”2” /> <produto descricao=”Sabão em Pó” quantidade=”4” /> </estoque> Agora sim sabemos que se trata de um estoque! E que cada item é um produto, com uma descrição e uma quantidade. Pág. 14 de 95 Experimente escrever o código XML do Quadro 3 em um arquivo de texto (que você pode criar com o bloco de notas no Windows), salvá-lo com a extensão .xml e abri-lo em um navegador (o Firefox e o Chrome são os que apresentam melhores resultados neste sentido). Você poderá ver sua estrutura como na figura 7. FIGURA 7 – Arquivo XML aberto no browser Firefox Fonte: Autoria própria Repare que o navegador “entende” a sintaxe do arquivo, separando os elementos e possibilitando que você expanda ou contraia cada um (clicando nos sinais de - e +). 2.3. APIs: DOM, SAX e TrAX Criar arquivos XML manualmente, como fizemos na seção anterior, não é prático nem desejável. De forma semelhante, ler e interpretar seus dados diretamente também não é ideal – afinal de contas, o intuito é que as informações possam ser extraídas automaticamente do arquivo XML. Para podermos usar os dados contidos em um arquivo XML em um programa, precisamos de um parser XML. O parser é capaz de extrair as informações de um arquivo XML e retorná-las em um formato adequado a um tipo de sistema ou linguagem (como um objeto em Java, por exemplo). Um dos modelos para o qual os dados de um documento XML podem ser extraídos é o DOM (Document Object Model). Trata-se de uma representação em árvore do documento XML e é também usado em arquivos HTML. Veja, na figura 8, um gráfico mostrando a hierarquia de uma tabela HTML dentro do DOM. Pág. 15 de 95 FIGURA 8 – Representação DOM de uma tabela Fonte: <http://www.w3.org/TR/WD-DOM/introduction.html> Outra forma de se especificar a estrutura de um arquivo XML são os DTDs (Document Type Definitions) e XML Schemas. Podemos dizer que, quando precisamos de uma representação de dados maior e mais detalhada, o uso de DTDs e XML Schemas é mais interessante que DOM. À medida que começarmos a usar XML no Android, você verá que XML Schemas são as formas para representar os dados que utiliza. Java possui, há muito tempo, APIs próprias para a leitura e geração de arquivos XML. A SAX (Simple API for XML) é uma das opções, em que a leitura dos arquivos XML é feita de forma sequencial. Já a TrAX (Transformation API for XML), que faz parte da API JAXP, permite a conversão de um documento XML em outros formatos (FAWCETT e QUIN, 2012). Dentro do Android, a maior parte da leitura e criação de arquivos XML é feita internamente pelo sistema operacional, evitando que o desenvolvedor precise utilizar diretamente API deste tipo. Pág. 16 de 95 MÓDULO 2 – AMBIENTE DE DESENVOLVIMENTO ANDROID Você já sabe neste momento que aplicativos Android são criados em Java. Mas não basta apenas ter o JDK instalado no seu computador para começar a criar seus apps – você precisa também do Android Studio. Trata-se do software usado para criarmos aplicativos Android, no qualestá incluído o Android SDK, um conjunto de APIs específicas deste sistema operacional, imprescindível para criar um aplicativo “com a cara do Android”. Neste módulo, você saberá como obter o Android Studio, instalá-lo e deixá-lo pronto para uso, assim como começar a criar seus próprios aplicativos em Java para o sistema do robô verde! AULA 3 – ANDROID STUDIO 3.1. Baixando e instalando o Android Studio Antes de qualquer coisa, certifique-se de que você já tem o JDK versão 8 instalado na sua máquina. Caso ainda não tenha, ou se você simplesmente deseja atualizar o seu JDK (o que é sempre uma boa ideia), acesse http://www.oracle.com/technetwork/java/javase/downloads/index. html e faça o download. Lembre-se de baixar a versão correta para seu sistema operacional, de 32 ou 64 bits, além de ajustar o link, caso este esteja desatualizado, ok? Vamos agora ao download do Android Studio, uma IDE (Integrated Development Environment, ou Ambiente de Desenvolvimento Integrado, em português) que contém as bibliotecas básicas para desenvolver em Java para Android. Acesse http://developer.android.com e procure pelo link indicado na figura 9. Pág. 17 de 95 FIGURA 9 – Link para download do Android Studio Fonte: <http://developer.android.com> Na tela seguinte, a versão adequada do Android Studio para seu sistema operacional poderá ser baixada, bastando clicar no botão indicado na figura 10. Pág. 18 de 95 FIGURA 10 – Botão para download do Android Studio na versão do seu sistema operacional Fonte: <https://developer.android.com/studio/index.html> Em seguida, você deverá concordar com os termos do download do Android Studio marcando a caixa indicada pela seta e clicar no botão logo abaixo (figura 11) para iniciar o download do pacote de instalação. FIGURA 11 – Concordando com os termos e iniciando o download Fonte: <https://developer.android.com/studio/index.html> Pág. 19 de 95 Finalmente começará o download. No caso de instalação em sistema operacional Windows, você possuirá, no término da transferência, um arquivo que, ao ser executado, iniciará o processo de instalação. Para sistemas operacionais Mac OS X e Linux, consulte as instruções exibidas no navegador após o download. No caso de instalação no Windows, após executar o programa baixado, será exibida a tela mostrada na figura 12. Clique sobre o botão Next para começar o processo de instalação. FIGURA 12 – Iniciando a instalação do Android Studio no Windows Fonte: <https://developer.android.com/studio/index.html> O procedimento de instalação é simples e segue o padrão da maioria dos instaladores de softwares para Windows: basta você manter selecionadas as opções default apresentadas e seguir clicando em Next até que o processo esteja concluído. No final da instalação, será exibida uma tela semelhante àquela mostrada na figura 13. Pág. 20 de 95 FIGURA 13 – Finalizando o processo de instalação do Android Studio Fonte: <https://developer.android.com/studio/index.html> Ao clicar em Finish, como indicado na figura 13, o instalador será encerrado e o Android Studio passará a ser inicializado pela primeira vez. AVISO! Para executar o Android Studio de modo satisfatório, é recomendado que o computador possua pelo menos 4 GB de RAM. 3.2. Primeiro contato com o Android Studio Ao abrir o Android Studio pela primeira vez, talvez você seja questionado se deseja importar as configurações usadas em uma versão anterior da ferramenta. Escolha a opção de sua preferência (ou simplesmente deixe marcada a opção padrão) e clique no botão OK (figura 14). Pág. 21 de 95 FIGURA 14 – Opções da primeira inicialização do Android Studio Fonte: Android Studio Em seguida, o Android Studio realizará o download de componentes adicionais e fará a criação de um AVD (Android Virtual Device) automaticamente para você. Esse “dispositivo virtual Android” será usado para testar seu app no emulador incluído no Android Studio. Para que tudo seja feito automaticamente, clique no botão Next na tela exibida na figura 15. FIGURA 15 – Fazendo as configurações finais do Android Studio Fonte: Android Studio Na tela seguinte (figura 16), mantenha a opção Standard selecionada e clique em Next. Pág. 22 de 95 FIGURA 16 – Selecionando a opção padrão para finalizar a configuração Fonte: Android Studio Será então exibida uma tela mostrando os componentes adicionais que serão baixados e onde eles serão armazenados no seu computador (figura 17). FIGURA 17 – Finalizando o assistente e configurações finais do Android Studio Fonte: Android Studio Clique em Finish para iniciar o download. Assim que ele for concluído, o Android Studio fará a autoconfiguração do AVD. Caso seu computador suporte a virtualização VT-x, tudo deverá acontecer sem problema. Porém, caso não tenha, talvez seja mostrada, ao final da instalação, uma mensagem semelhante à apresentada na figura 18: Pág. 23 de 95 FIGURA 18 – Tela final da configuração exibindo mensagem de erro Fonte: Android Studio IMPORTANTE Com o intuito de acelerar a execução do emulador, o Android Studio inicialmente tenta criar um AVD com uma versão do Android para processadores x86, que poderá ser executada com excelente desempenho em computadores que suportam a tecnologia de virtualização VT-x com uso do software Intel HAXM. Caso seu computador apresente a mensagem em vermelho na figura 18 (ou algo semelhante), será necessário, antes de executar os programas no emulador, criar manualmente um AVD usando uma versão do Android para processadores ARM. Veja como isso é feito na próxima seção deste material. De qualquer forma, tendo sido mostrada a mensagem de erro ou não, logo após o fechamento da janela mostrada na figura 18 será exibida a tela de boas-vindas do Android Studio (figura 19): Pág. 24 de 95 FIGURA 19 – Tela de boas-vindas do Android Studio Fonte: Android Studio Clique no botão indicado pela seta na figura 19 para criar um novo projeto de aplicativo Android. 3.3. Seu primeiro aplicativo Android Após clicar no botão indicado na figura 19, será iniciado o assistente de criação de um novo projeto. Na primeira tela (figura 20), você deverá informar um nome para o seu projeto (que será também o nome do seu app quando ele estiver instalado no aparelho). Para este exemplo, use o nome “Contador”. FIGURA 20 – Primeira tela na criação de um novo projeto Fonte: Android Studio Pág. 25 de 95 Em Company Domain você pode colocar um nome de domínio Internet, que será usado, em formato reverso, nos pacotes das suas classes Java; se não tiver direito de uso de um domínio, pode usar uma valor fictício, como o indicado (example.com). O seu projeto ficará salvo na pasta indicada em Project Location; você pode alterá-la, se quiser. Após definir as configurações desejadas, clique em Next. Na próxima tela (figura 21) indicamos a plataforma alvo do aplicativo Android que criaremos. É possível criar apps para Android destinados a outras plataformas de aparelhos, como TVs, relógios (Wear) e até mesmo o famoso Google Glass, mas no nosso caso o alvo serão os principais dispositivos para esse sistema operacional: Phone and Tablet. FIGURA 21 – Definindo a plataforma e versão mínima do Android Fonte: Android Studio Em Minimum SDK é possível estabelecer a versão mínima do Android necessária para que o aplicativo funcione. O padrão mostrado na tela da figura 21 (API 15: Android 4 .0 .3) indica que nosso app poderá ser executado em versões do Android iguais ou superiores a esta – assim, a abrangência do aplicativo aumenta, como dissemos. Porém, recursos novos acrescentados em versões posteriores poderão não estar disponíveis. A versão sugerida é uma boa escolha, pois proporciona um balanço entre disponibilidade de recursos novos e abrangência de uso (veja na figura 21 que a versão selecionada é a utilizada em cerca de 97,4% dos aparelhos ativos). Clique em Next para passar à próxima tela.Pág. 26 de 95 FIGURA 22 – Escolhendo um modelo para a tela principal do aplicativo Fonte: Android Studio Neste momento (figura 22) podemos escolher um modelo inicial para a tela principal do aplicativo. Nos nossos projetos escolheremos sempre a versão mais simples de tela: a Empty Activity, como indicado na figura 22, que traz uma tela em branco sem conteúdo específico. Selecione esse tipo e clique em Next. A última tela do assistente de criação do projeto permite a definição do nome do arquivo de layout e a classe Java para a tela inicial (figura 23). Em breve, conheceremos melhor o papel destes arquivos. Deixe os valores default e clique em Finish para finalizar a criação do projeto. FIGURA 23 – Escolhendo um modelo para a tela principal do aplicativo Fonte: Android Studio Após alguns segundos, seu projeto estará criado e pronto para ser modificado. A tela do Android Studio com um projeto recém-criado é semelhante à apresentada na figura 23. Caso não esteja Pág. 27 de 95 visualizando a tela do aplicativo como a mostrada na figura, abra, à esquerda, as pastas app\res\ layout e clique duas vezes sobre o arquivo activity_main .xml. FIGURA 24 – Projeto Contador no Android Studio Fonte: Android Studio • À esquerda, temos a aba Project, em que são exibidos os arquivos do projeto. Os dois arquivos mais importantes para nós, por enquanto, são os seguintes: ◊ MainActivity .java, na pasta app\java\nome_do_pacote_de_classes: é o arquivo no qual escrevemos o código Java relativo aos eventos (ações) que ocorrem em uma tela. Por exemplo: quando a tela é criada ou quando o usuário toca em um botão. ◊ activity_main .xml, na pasta app\res\layout: contém a especificação em XML do layout da tela do programa. É este arquivo que está aberto no momento e você pode vê-lo (no modo de layout gráfico) na parte central do Android Studio. • Na parte central do Android Studio, são exibidos os arquivos atualmente abertos. Na figura 24, o arquivo atualmente aberto é o activity_main .xml, que contém o layout da tela. Quando criamos o layout, podemos alternar entre a sua exibição gráfica (por meio da aba Design, na parte inferior) ou do seu código em XML (exibido no clique da aba Text). Outros arquivos abertos podem ser “trazidos para frente” por meio do uso das abas. • No canto superior direito, temos a Component Tree (Árvore de Componentes). Ela é útil, pois mostra a hierarquia dos widgets na janela (os componentes que usamos para montar uma tela – como botões e rótulos de texto). Pág. 28 de 95 • No canto inferior direito, temos Properties, a janela de propriedades. Ela é usada para modificarmos os atributos dos widgets existentes na tela. Por exemplo: clicando sobre um botão, podemos trocar o texto exibido dentro dele alterando a propriedade text. • Por fim, na parte inferior do Android Studio, temos (ocultas na figura 24, mas que podem ser abertas clicando nos botões existentes) janelas de informações diversas. É ali que serão exibidas informações sobre a execução de um programa e localização de erros de compilação e execução. Antes de começarmos a escrever o código do nosso aplicativo, precisamos assegurar que um AVD (Android Virtual Device) esteja disponível para testarmos o app no emulador. Esse AVD já pode ter sido criado para você automaticamente no momento da instalação. Porém, se uma mensagem de erro foi exibida ao seu final (como mostrado na figura 18), será necessário criar o AVD manualmente. Se este foi o seu caso, siga as etapas da próxima seção, onde são dadas instruções sobre como criar o AVD caso ele não exista. 3.4. Criando um dispositivo virtual Android (AVD) Para testar seus aplicativos você utilizará o emulador do Android incluído no Android Studio. Antes de utilizá-lo, é preciso criar um “dispositivo virtual Android” (AVD: Android Virtual Device), que é uma “imagem” do sistema operacional com uma configuração de hardware adequada para seus testes (simulando, assim, um dispositivo real). Você precisa criar somente um AVD para testar seus programas. Porém, caso deseje (ou precise), pode criar AVDs com diferentes versões do Android e configurações de hardware variadas para testes. Verifique se o AVD foi criado no momento da instalação clicando sobre o botão indicado na figura 25. Este botão abre o AVD Manager, um gerenciador para criação e manutenção dos dispositivos virtuais. Pág. 29 de 95 FIGURA 25 – Botão da barra de ferramentas para abertura do AVD Manager Fonte: Android Studio Se seu computador atendeu aos requisitos necessários, deve ter sido criado um AVD usando uma imagem do Android para processadores x86, que poderá ser executada em alto desempenho no seu computador. Caso não tenha sido possível a criação, e uma mensagem de erro semelhante à exibida na figura 18 tenha sido mostrada, será preciso criar um AVD usando uma imagem do Android para processadores ARM. Caso seja exibida uma tela como a da figura 26, siga as próximas etapas para criar o AVD. FIGURA 26 – AVD Manager: neste exemplo, nenhum AVD foi criado Fonte: Android Studio Para iniciar o processo de criação do AVD, clique no botão Create Virtual Device. Será mostrada a tela apresentada na figura 27. Pág. 30 de 95 FIGURA 27 – Configurações do novo dispositivo virtual Android Fonte: Android Studio Neste ponto selecionamos uma configuração para o aparelho a ser emulado. Marque o Nexus 4 dentro da categoria Phone. Ele tem um tamanho de tela semelhante a muitos aparelhos Android do mercado e serve perfeitamente como base para nossos aplicativos. Clique em Next para continuar. Em seguida, precisaremos escolher a imagem do Android a ser usada na emulação. Lembre-se de que estamos criando um AVD porque o instalador do Android Studio não conseguiu gerar um dispositivo virtual padrão com a imagem x86 no seu computador. Por isso, deveremos escolher uma imagem destinada a outra família de processadores, a família ARM. Para baixar a imagem do Android para ARM, clique na aba Other Images da tela na figura 28. Localize a imagem do Android Marshmallow (ou versão mais recente) para processador ARM (indicada na coluna ABI como armeabi-v7) e com suporte às APIs do Google, como a indicada pela seta na figura 28. Clique então em Download para que a imagem seja baixada. Pág. 31 de 95 FIGURA 28 – Escolhendo a imagem do Android a ser usada no AVD Fonte: Android Studio Uma nova tela, exibida na figura 29, será exibida. Para iniciar o download, você precisa concordar com os termos de uso da imagem clicando em Accept e, posteriormente, em Next. FIGURA 29 – Aceitando os termos e iniciando o download Fonte: Android Studio O download será então iniciado. Quando estiver finalizado, clique no botão Finish (figura 30). Pág. 32 de 95 FIGURA 30 – Aceitando os termos e iniciando o download Fonte: Android Studio A nova imagem poderá agora ser selecionada, como indicado na figura 31. Clique sobre ele e, em seguida, no botão Next. FIGURA 31 – Selecionando a imagem ARM para o AVD Fonte: Android Studio Os avisos em vermelho indicam que a CPU do computador em questão não suporta a tecnologia VT-x, por isso temos de criar um AVD com a imagem do Android para processador ARM. Como Pág. 33 de 95 indicado na outra mensagem logo abaixo, a emulação para x86 apresentaria um desempenho superior. Na última tela de configuração do AVD (figura 32), podemos manter as configurações default e clicar no botão Finish. FIGURA 32 – Última tela do processo de criação do AVD Fonte: Android Studio Tudo pronto! Pode fechar o AVD Manager e voltar ao projeto que criamos anteriormente; vamos finalmente implementá-lo! 3.5. Escrevendo o código do seu primeiro aplicativo Para poder exemplificar a criação passo a passo de um aplicativo Android, vamos criar um programa simples, que realiza uma contagem com base em toques em um botão. A primeira etapa na criação de um app geralmente é a montagem da sua interface.No Android, fazemos isso colocando e configurando os elementos visuais (widgets), e isso pode ser feito graficamente ou por meio da escrita direta do arquivo XML. Para escrever o layout de uma tela em XML, na parte inferior da janela central do Android Studio, clique na aba Text. Você tem duas opções agora: pode construir sua interface graficamente, arrastando os widgets existentes na palheta (Palette) e configurando suas propriedades de acordo com a listagem do quadro 4, ou digitar diretamente seu código em XML. Pág. 34 de 95 QUADRO 4 – Código do arquivo activity_main.xml (pasta res\layout do projeto) <?xml version=”1.0” encoding=”utf-8”?> <RelativeLayout xmlns:android=”http://schemas.android.com/apk/res/android” xmlns:tools=”http://schemas.android.com/tools” android:layout _ width=”match _ parent” android:layout _ height=”match _ parent” android:paddingBottom=”@dimen/activity _ vertical _ margin” android:paddingLeft=”@dimen/activity _ horizontal _ margin” android:paddingRight=”@dimen/activity _ horizontal _ margin” android:paddingTop=”@dimen/activity _ vertical _ margin” tools:context=”com.example.professores.contador.MainActivity”> <TextView android:layout _ width=”wrap _ content” android:layout _ height=”wrap _ content” android:textAppearance=”?android:attr/textAppearanceLarge” android:text=”0” android:id=”@+id/txtContador” android:layout _ alignParentTop=”true” android:layout _ centerHorizontal=”true” android:layout _ marginTop=”41dp” /> <Button android:layout _ width=”wrap _ content” android:layout _ height=”wrap _ content” android:text=”Contar” android:id=”@+id/button” android:layout _ below=”@+id/txtContador” android:layout _ centerHorizontal=”true” android:layout _ marginTop=”41dp” android:onClick=”onClickContar” /> </RelativeLayout> Neste layout, temos um TextView, usado para exibição de um texto, e um Button, o qual, quando tocado, incrementará uma variável contadora que será posteriormente mostrada no TextView. Pág. 35 de 95 O TextView recebeu o idtxtContador, e será por meio dele que faremos acesso a este widget pelo código Java. Também modificamos a propriedade text de cada um deles, colocando nela o texto que será exibido (0 inicialmente para o TextView contador e “Contar” para o botão). Repare, na última linha das configurações do Button, que definimos o valor onClickContar para sua propriedade onClick. Trata-se do nome do método Java que será disparado, dentro do arquivo MainActivity .java, quando o usuário clicar no botão. CUIDADO NA HORA DE DEFINIR O NOME DO MÉTODO PARA onClick! O nome que você coloca na propriedade onClick de um Button deve ser exatamente o mesmo que utilizará no código Java! Tome cuidado, pois maiúsculas e minúsculas fazem, sim, toda a diferença. Vamos agora ao código Java. Abra o arquivo MainActivity .java, existente dentro da pasta java\ nome_do_seu_pacote do seu projeto (o nome do pacote dependerá do que foi colocado em Company domain no momento da criação do app – veja a figura 20). Deixe o código-fonte como o exibido no quadro 5. Pág. 36 de 95 QUADRO 5 – Código do arquivo MainActivity.java (pasta java do projeto) package com.example.professores.contador; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.TextView; public class MainActivity extends AppCompatActivity { int contador = 0; public void onClickContar(View v) { TextView txtContador = (TextView)findViewById(R.id.txtContador); contador++; txtContador.setText(String.valueOf(contador)); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity _ main); } } Começamos acrescentando os imports para duas classes do Android SDK que vamos utilizar: View e TextView. Em seguida, no início da classe, declaramos uma variável int denominada contador e atribuímos 0 a ela. Essa variável será criada assim que a janela for aberta (ou seja, assim que o programa começar), e será visível por todos os métodos existentes nela. Sua “vida útil” será a mesma da classe; como a classe corresponde à janela, enquanto a janela estiver ativa a variável será mantida. Pág. 37 de 95 O método onClickContar será executado quando o usuário tocar no botão que colocamos na interface. Repare que este método deve ter o mesmo nome colocado no arquivo XML e deve, obrigatoriamente, ter o retorno e parâmetro especificados. Os widgets colocados na interface não são diretamente acessíveis pelo código Java; por isso precisamos da primeira linha existente no método, na qual chamamos o importantíssimo comando findViewById() para “conectar” a variável local txtContador, declarada dentro do método, ao respectivo widget existente na interface (localizado por seu id em R .id .txtContador). Em seguida, incrementamos o valor do inteiro contador e o colocamos convertido em String “dentro” do txtContador, nosso TextView, usando seu método setText(). Tudo pronto! Para executar o aplicativo e testá-lo no emulador, clique no botão da barra de ferramentas do Android Studio, selecione um AVD na tela que será mostrada e clique em OK. O resultado será semelhante ao apresentado na figura 33. FIGURA 33 – Tela do aplicativo Contador Fonte: Android Studio MÓDULO 3 – VIEW E ACTIVITY Neste módulo entraremos mais a fundo no que é uma View e uma Activity no Android. Você verá que entender bem os conceitos por trás destas duas classes é essencial para desenvolver aplicativos mais completos. Aprenderá como usar outros widgets além do Button e do TextView vistos no módulo anterior e saberá como funciona o processo de abertura e exibição de uma tela, Pág. 38 de 95 por meio da sua Activity. Por fim, conhecerá a ListActivity e a ListView, que permitem a exibição rápida e prática de uma lista de itens na tela do Android. AULA 4 – WIDGETS BÁSICOS E DEFINIÇÃO DE VIEW No módulo anterior você ficou sabendo o que são widgets: os elementos que usamos para “construir” a tela de um aplicativo Android. Mas ainda não sabe que existe uma classe “pai” para todos esses objetos que colocamos na tela do Android: a View. Basicamente, poderíamos definir uma View como um espaço retangular delimitado na tela do Android. Nessa definição se encaixam os widgets e, também, os gerenciadores de layout, que funcionam como “caixas” ou “containers” de outros widgets. Todos pertencem a uma hierarquia de classes, que pode ser observada (parcialmente) na figura 34. FIGURA 34 – Parte da hierarquia de Views e Widgets do Android Fonte: Querino Filho, 2013 Por isso, lembre-se: todo elemento colocado em uma tela do Android é, portanto, uma View. Isso possibilita, por exemplo, que possamos usar o comando findViewById para conectar o código Java a qualquer tipo de objeto na tela. Pág. 39 de 95 FIGURA 35 – Palheta de widgets do Android Fonte: Android Studio 4.1. Widgets: os componentes de uma tela Android Como já sabemos, existem diversos widgets que podemos usar para montar uma tela de um aplicativo Android. Nós já usamos e conhecemos dois deles: o TextView e o Button. Você pode conhecer os demais pela Palette do Android Studio (figura 35) ou consultando a documentação oficial da API do Android. Você já percebeu que podemos colocar os widgets diretamente em uma tela arrastando os componentes a partir da palheta. Selecionando um widget, você pode configurar suas propriedades pela janela Properties, como na figura 36. Pág. 40 de 95 FIGURA 36 – Configurando widgets graficamente Fonte: Android Studio Porém, desenvolvedores mais experientes, de acordo com os tutoriais e documentação disponibilizados pelo Google em developer.android.com (2014), preferem configurar a interface diretamente pelo código XML. Para editar a interface usando XML, clique sobre a aba indicada na figura 37. FIGURA37 – Visualizando e editando a interface via XML Fonte: Android Studio Pág. 41 de 95 4.2. Introdução ao Activity: a classe Java controladora de uma tela A classe MainActivity.java que existe em todo projeto Android criado contém o código necessário para manipular os eventos que acontecem com a tela. Dê uma olhada no código “básico” de uma Activity recém-criada no quadro 6. QUADRO 6 – Código do arquivo MainActivity.java de um projeto recém-criado package com.example.professores.contador; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity _ main); } } Imediatamente, pela declaração da classe, você pode perceber que ela herda AppCompatActivity, uma classe existente no Android SDK que serve como base para nossas telas. Como desenvolvedor Java experiente, você já notou a existência de um método e que ele está marcado com a anotação @Override, que indica que este método está sobrescrevendo um método recebido por herança da sua superclasse (AppComptaActivity). O método em questão se chama onCreate. Como o próprio nome dá a entender, ele é executado quando o evento de criação da tela acontece, ou seja, assim que a tela aparece pela primeira vez. Dentro dele, vemos uma chamada ao método original da superclasse – ele está lá para que uma tela básica em branco seja criada. Em seguida, vem uma parte fundamental: o comando setContentView. Perceba que passamos ao setContentView o nome do nosso arquivo de layout, Pág. 42 de 95 existente na pasta res/layout. Sim, é ele mesmo: o arquivo XML no qual definimos nossa interface! É graças ao setContentView que, ao invés de ficarmos com a tela branca padrão, temos a exibição do layout criado! CURIOSIDADE FAZENDO UMA EXPERIÊNCIA: DESATIVANDO O “setContentView” Para entender melhor o “porquê” do setContentView, faça uma experiência com um dos seus projetos: comente (coloque duas barras no início da linha) o setContentView, dentro do método onCreate da classe MainActivity, execute o projeto e veja o resultado. Sentiu falta de alguma coisa? 4.3. Mais Widgets: EditText, ImageView e Toast Vamos conhecer agora mais alguns widgets bastante úteis, começando por um praticamente essencial: o EditText. É com ele que o usuário pode digitar informações para o aplicativo, por meio do uso do teclado virtual (ou físico em alguns poucos modelos). O widget EditText pode ser configurado para restringir os caracteres que o usuário poderá digitar nele. Por exemplo, no caso de fornecimento de valores numéricos, é possível “travar” a entrada de caracteres que não sejam números, pontuação e sinal. Há também uma variação adequada para o fornecimento de números de telefone, por exemplo, que permite apenas números, parênteses e hífen. Você pode adicionar o EditText diretamente pelo código XML ou pode simplesmente arrastar e soltar uma das suas variações existentes na palheta, dentro da categoria Text Fields (veja a figura 38). Pág. 43 de 95 FIGURA 38 – Localização dos widgets EditText na palheta do Android Studio Fonte: Android Studio Todos os widgets existentes na palheta são EditText; o que diferencia um do outro aqui é sua configuração Input Type, que estabelece o controle sobre quais caracteres são permitidos. Com um EditText na interface, você pode obter o valor digitado nele por seu método getText(), que deverá receber um toString() ao final para que seja convertido para uma String Java. Para colocar uma String em um EditText, usamos o seu método setText(), passando a String como seu parâmetro. Veja no quadro 7 exemplos de como utilizá-los. QUADRO 7 – Exemplo de uso de um EditText em código Java // Faz a conexão ao editText1 na interface EditText editText1 = (EditText)findViewById(R.id.editText1); // Obtém o conteúdo do editText1 e o converte para uma String Java básica String textoNoEdit = editText1.getText().toString(); // Coloca no editText1 o conteúdo da String em letras maiúsculas editText1.setText(textoNoEdit.toUpperCase()); Outro widget que pode ser bastante útil em seus projetos é o ImageView. Com ele, podemos exibir imagens e fotos em uma tela do Android. Para utilizá-lo, basta copiar uma imagem para a pasta res\drawable do seu projeto. Você pode fazer isso simplesmente copiando o arquivo da imagem (com CTRL+C em um PC ou Command+C Pág. 44 de 95 em um Mac) e colando (com CTRL+V em um PC ou Command+V no Mac) na pasta drawable. Na tela que será exibida logo após colar, confirme a operação de cópia clicando em OK. Após colocada a imagem, arraste um widget ImageView (ele está dentro da categoria Widgets da palheta) até alguma parte da sua tela. Clique duas vezes sobre ele e, na janela popup que aparecerá, especifique a imagem a ser utilizada na propriedade src (veja a figura 39)! FIGURA 39 – Adicionando imagens a uma tela com ImageView Fonte: Android Studio É possível digitar o nome da imagem diretamente em src, colocando o identificador @drawable/ antes deste e omitindo sua extensão. Se preferir, clique nos três pontinhos à direita e, na janela que será exibida, localize sua imagem na aba Drawable. Conheceremos agora mais um widget útil: o Toast. Ele não é encontrado na palheta de objetos – seu uso é realizado diretamente pelo código Java. Com o Toast, você consegue exibir mensagens curtas que desaparecem automaticamente após um período. Para utilizá-lo, use um código semelhante ao do quadro 8. Pág. 45 de 95 QUADRO 8 – Exemplo de uso de Toast Toast.makeText(this, “Esta é uma mensagem rápida!”, Toast.LENGTH_SHORT).show(); O método makeText() recebe três parâmetros: • Um indicador do contexto atual, que geralmente é a própria Activity, na qual o comando é executado – por essa razão, passamos this neste parâmetro; • Uma String de texto com a mensagem a ser exibida; • Uma constante que determina a duração da exibição da mensagem, que pode ser Toast . LENGTH_LONG (para maior duração) ou Toast .LENGTH_SHORT (para menor duração). NUNCA SE ESQUEÇA de chamar o método show() após makeText(), como no quadro 8! O método makeText cria a mensagem mas não a exibe; quem faz isso é o método show(). AULA 5 – APROFUNDANDO O CONHECIMENTO SOBRE A CLASSE ACTIVITY A Activity, classe que funciona como uma controladora de uma tela do aplicativo Android, é bastante robusta e flexível. Existem vários eventos e estados de uma Activity, e o programador pode criar comportamentos específicos para cada uma delas. Nesta aula, conheceremos também uma Activity especial, a ListActivity, que possui embutida uma lista que pode ser usada para listagem de diversos tipos de informação. 5.1. O ciclo de vida de uma Activity: onCreate, onDestroy etc. Já sabemos que, quando uma tela é criada, o seu método onCreate é invocado. Dentro dele, podemos colocar código de inicialização de valores e também definição dos elementos da interface, com base em um arquivo XML. Porém, existem outros eventos em uma Activity que podem ser programados. Suponha, por exemplo, que no momento em que a Activity for fechada, você precisaria salvar dados ou gravar o estado atual do aplicativo para que possa ser restaurado depois. Pois bem, existe um evento que você pode sobrescrever para especificar o que fazer nesta situação! Para compreender melhor o ciclo de vida de uma Activity, dê uma olhada no gráfico da figura 40. Pág. 46 de 95 FIGURA 40 – Ciclo de vida de uma Activity Fonte: <https://developer.android.com/images/training/basics/basic-lifecycle.png> • Quando a Activity é criada, o evento onCreate() é disparado. • Em seguida, ocorre o evento onStart(), logo antes da Activity finalmente ser exibida ao usuário. • Quando a Activity atual fica parcialmente em segundo plano, em função de uma caixa de diálogo ou outra tela semitransparenteter sido aberta, ou seja, uma situação que não oculta totalmente a tela, esta entra no estado de onPause(). ◊ No momento em que ocorre a desobstrução, a Activity continua após o evento onResume(). • No caso de uma nova tela ser aberta e ocultar totalmente a tela atual, dizemos que esta Activity entrou no estado de parada e executou o evento onStop(). ◊ Neste caso, quando o usuário retorna à Activity que ficou “de baixo”, ela executa o evento onRestart() e posteriormente o onStart(). • Finalmente, logo antes da Activity ser totalmente fechada, ocorre o evento onDestroy(). 5.2. Eventos de clique em botões Os cliques (ou melhor dizendo, toques) nos botões são as principais formas de programar ações em um aplicativo Android. Dizemos que ele é um evento e que será manipulado por um método dentro de uma classe Java (no caso, a Activity). Definimos o nome do método que será disparado no toque de um botão por meio da sua propriedade onClick, dentro de um arquivo XML. Também pode ser designado por meio da interface Pág. 47 de 95 gráfica, usando a janela de propriedades. No caso do XML, a configuração da propriedade é feita como exibido no quadro 9. QUADRO 9 – Exemplo de uso de configuração do evento onClick botão <Button android:layout _ width=”wrap _ content” android:layout _ height=”wrap _ content” android:text=”Incluir” android:id=”@+id/button” android:layout _ centerHorizontal=”true” android:layout _ marginTop=”36dp” android:onClick=”onClickIncluir” /> Depois de configurado o nome do método na propriedade, o método para o evento deve ter exatamente o mesmo nome que foi especificado. Também é obrigatório que o método seja public com retorno vazio (void) e que receba um objeto da classe View como parâmetro, como mostra o exemplo no quadro 10. QUADRO 10 – Exemplo de método para evento onClick de um botão public void onClickIncluir(View view) { // Lógica para execução no clique do botão, como por exemplo // procedimentos para inclusão de um cliente no banco de dados } 5.3. ListActivity = Activity + ListView Se você já deu uma boa olhada na palheta de widgets, pode ter visto um componente chamado ListView. Ele é bastante útil para uma série de aplicativos, pois torna muito fácil a exibição de dados em listas. Ele está dentro da categoria Containers da palheta (veja a figura 41). Pág. 48 de 95 FIGURA 41 – Localização do widget ListView na palheta do Android Studio Fonte: Android Studio Você pode adicionar este ListView a uma tela de layout, conectá-lo ao código Java com findViewById() e depois programar o widget para exibir os dados. Mas há um jeito ainda mais prático e com mais opções: usar a ListActivity. Trata-se de uma Activity especial, que já “sabe” como lidar com um ListView. Na verdade, ela traz em si um ListView embutido, e poderia até mesmo ser usada sem um arquivo de layout, mas vamos usá-la junto do activity_main.xml para que possamos customizá-lo. Vamos supor que você está querendo criar uma lista de compras. O primeiro passo é criar um layout com um ListView para exibição da lista, assim como um EditText para o usuário escrever um nome de um item e um botão com a ação de incluí-lo. Um exemplo de layout dessa maneira pode ser visto no quadro 11. Pág. 49 de 95 QUADRO 11 – Exemplo de arquivo de layout com ListView, EditText e Button. <?xml version=”1.0” encoding=”utf-8”?> <RelativeLayout xmlns:android=”http://schemas.android.com/apk/res/android” xmlns:tools=”http://schemas.android.com/tools” android:layout _ width=”match _ parent” android:layout _ height=”match _ parent” android:paddingBottom=”@dimen/activity _ vertical _ margin” android:paddingLeft=”@dimen/activity _ horizontal _ margin” android:paddingRight=”@dimen/activity _ horizontal _ margin” android:paddingTop=”@dimen/activity _ vertical _ margin” tools:context=”com.example.professores.listadecompras.MainActivity”> <EditText android:layout _ width=”wrap _ content” android:layout _ height=”wrap _ content” android:id=”@+id/edtProduto” android:layout _ alignParentTop=”true” android:layout _ alignParentLeft=”true” android:layout _ alignParentStart=”true” android:layout _ alignParentRight=”true” android:layout _ alignParentEnd=”true” /> <Button android:layout _ width=”wrap _ content” android:layout _ height=”wrap _ content” android:text=”Incluir” android:id=”@+id/button” android:layout _ below=”@+id/edtProduto” android:layout _ alignParentLeft=”true” android:layout _ alignParentStart=”true” android:layout _ alignRight=”@+id/edtProduto” android:layout _ alignEnd=”@+id/edtProduto” Pág. 50 de 95 android:onClick=”onClickAdicionar” /> <ListView android:layout _ width=”wrap _ content” android:layout _ height=”wrap _ content” android:id=”@android:id/list” android:layout _ below=”@+id/button” android:layout _ alignParentLeft=”true” android:layout _ alignParentStart=”true” /> </RelativeLayout> Os pontos principais neste layout são os seguintes: • Colocamos no EditText, em que será digitado o item idedtProduto, para identificá-lo corretamente no código Java; • No Button que vai realizar a inclusão do item digitado, configuramos seu evento onClick para disparar o método onClickAdicionar – este será o nome que deveremos usar na classe Java; • No ListView, uma configuração fundamental para que ele possa ser usado na ListActivity: seu id tem que ser, obrigatoriamente, @android:id/list. Na classe Java, teremos código para: • Inicializar a lista com alguns valores (faremos isso no evento onCreate); • Incluir um item na lista quando o usuário tocar no botão (isso será feito na programação do método onClickAdicionar); • Excluir um item da lista quando ele for tocado (conseguiremos fazer isso com o uso de um evento especial da ListActivity, chamado onListItemClick). Para conseguir cumprir esses procedimentos, altere o código da MainActivity.java do seu projeto para o exibido no quadro 12. Pág. 51 de 95 QUADRO 12 – Código para MainActivity.java com suporte a ListView package com.example.professores.listadecompras; import java.util.ArrayList; import android.app.ListActivity; import android.os.Bundle; import android.view.View; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ListView; import android.widget.Toast; public class MainActivity extends ListActivity { EditText edtProduto; ArrayList<String>lista; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity _ main); String[] produtos = new String[]{“Arroz”, “Feijão”, “Batata”}; lista = new ArrayList<String>(); for (int i = 0; i < produtos.length; ++i) { lista.add(produtos[i]); } ArrayAdapter<String> adaptador = new ArrayAdapter<String>(this, android.R.layout.simple _ list _ item _ 1, lista); setListAdapter(adaptador); edtProduto = (EditText)findViewById(R.id.edtProduto); } public void onClickAdicionar(View v) { Pág. 52 de 95 String produto = edtProduto.getText().toString(); lista.add(produto); ArrayAdapter<String> adaptador = (ArrayAdapter<String>)getListAdapter(); adaptador.notifyDataSetChanged(); edtProduto.setText(“”); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { Toast.makeText(this, “Você selecionou: “ + lista.get(position), Toast.LENGTH _ SHORT).show(); } } android:layout _ alignRight=”@+id/edtProduto” android:layout _ alignEnd=”@+id/edtProduto” android:onClick=”onClickAdicionar” /> <ListView android:layout _ width=”wrap _ content” android:layout _ height=”wrap _ content” android:id=”@android:id/list” android:layout _ below=”@+id/button” android:layout _ alignParentLeft=”true” android:layout _ alignParentStart=”true” /> </RelativeLayout> O primeiro passo a ser feito é mudar a superclassede MainActivity de AppCompatActivity para ListActivity. Basta trocar o nome da superclasse após extends e adicionar o import adequado; • Toda lista precisa ter uma fonte para seus dados, ou seja, os elementos que serão colocados na lista; por isso, declaramos na nossa classe um ArrayList de Strings denominado lista. Como usaremos o EditText edtProduto em mais de um método, também o colocamos como um campo global da classe; • No onCreate, fazemos a inicialização da lista. Criamos um vetor comum de Strings (produtos) e depois adicionamos os seus elementos ao ArrayList lista. Para conectar os elementos do Pág. 53 de 95 ArrayList à lista do ListView, usamos um objeto do Android denominado ArrayAdapter. Criamos um chamado adaptador, e ao seu construtor passamos três parâmetros: uma referência ao contexto atual (this, ou seja, a própria Activity em que estamos criando o adaptador); o nome de um layout para a lista – neste caso, usamos um layout padrão do Android que contém apenas uma linha de texto por item da lista – simple_list_item_1; e, finalmente, o adaptador; • Na penúltima linha do onCreate, o método setListAdapter configura o adaptador para a lista existente. Com isso, os itens já adicionados ao ArrayList já aparecerão no ListView; • Por fim, no onCreate, criamos a ligação entre o edtProduto local na classe e ao existente na interface R .id .edtProduto; • O método onClickAdicionar será executado quando o usuário tocar no botão criado na interface. Inicialmente, usamos a referência a edtProduto para obter o texto nele contido e armazenar na String produto. Obtemos, então, uma referência ao adaptador para chamar seu método notifyDataSetChanged(), que fará a atualização dos dados exibidos no ListView, já que mudamos a fonte dos dados do ListView (o ArrayList lista) acrescentando mais um produto; • O método onListItemClick é um evento que ocorre quando um item da lista é tocado. Bastante útil, ele recebe quatro parâmetros. Um deles é particularmente útil para nós: o intposition, que traz o índice da linha tocada dentro da lista (0 para o primeiro até n-1 para o último, sendo n a quantidade de itens na lista). Como nossa lista está exibindo diretamente o conteúdo de um ArrayList, o position é exatamente o índice do elemento no ArrayList. Assim, exibimos uma mensagem rápida com Toast, mostrando o nome do item tocado, que é obtido diretamente do ArrayList. SAIBA MAIS A VERSATILIDADE DO onListItemClick Este método pode ser usado para várias outras operações com a lista: Excluir um item tocado; Abrir uma próxima tela com mais informações do elemento tocado (veremos como abrir uma nova tela no próximo módulo); Iniciar a alteração do item, em uma caixa de diálogo ou tela em que os dados podem ser alterados. MÓDULO 4 – LAYOUTS E INTENTS Construir uma boa interface de um aplicativo Android é muito mais do que escrever o código XML corretamente ou arrastar, soltar e configurar as propriedades dos widgets. O uso dos “containers” de widgets (os gerenciadores de layout) possibilita que os elementos permaneçam organizados Pág. 54 de 95 adequadamente na tela, até mesmo no caso de aparelhos com diferentes tamanhos de tela. Neste módulo, conheceremos um pouco mais sobre os gerenciadores de layout. A classe Intent, utilizada para realizar operações que envolvam atenção do sistema operacional, por exemplo, abrir novas janelas, também será abordada neste módulo. AULA 6 – ORGANIZANDO A TELA COM GERENCIADORES DE LAYOUT Há várias opções de gerenciadores de layout no Android SDK. Muitas delas podem ser simplesmente arrastadas para a tela por meio da palheta de widgets, como pode ser observado na figura 42. FIGURA 42 – Gerenciadores de layout disponíveis na palheta de widgets Fonte: Android Studio Como você pode ver, há várias opções de layout. Porém, a grande maioria dos aplicativos é construída com um destes dois: RelativeLayout e LinearLayout, que são, inclusive, os mais utilizados nos documentos de referência que a Google disponibiliza no developer.android.com. Veremos agora um pouco mais sobre cada um destes dois, assim como as vantagens e desvantagens em utilizá-los. Pág. 55 de 95 6.1. RelativeLayout O layout relativo (RelativeLayout) é o padrão para construção de novas telas no Android. Ele faz com que os widgets sejam posicionados em relação a outro, ou em relação aos cantos e centro da tela. Assim, os widgets podem se adaptar adequadamente a mudanças na tela. Veja na figura 43 um exemplo de uso do layout relativo. FIGURA 43 – Exemplo de uso do RelativeLayout Fonte: Android Studio Você vê as linhas verdes na figura 43? Elas mostram o posicionamento relativo do widget selecionado. Por exemplo, o TextView contendo o texto Celsius está posicionado em relação aos lados superior e esquerdo da tela, assim como um pouco acima em relação ao TextView contendo o texto Fahrenheit. Agora veja na figura 44 o posicionamento do EditText à direita de Fahrenheit. FIGURA 44 – Exemplo de uso do RelativeLayout Fonte: Android Studio Pág. 56 de 95 Podemos ver que o EditText está posicionado em relação aos dois TextView, ao EditText do Celsius e também ao botão. Esse excesso de “relações” pode ser problemático: se movermos ou reposicionarmos apenas um widget, pode ocorrer uma “reação em cadeia” que modificará profundamente a interface. Em alguns casos, o reposicionamento automático para diferentes tamanhos de tela pode também não surtir o efeito desejado. Para ter uma garantia maior da posição final dos widgets, diminuindo a liberdade no seu posicionamento, podemos utilizar o Linear Layout. 6.2. LinearLayout Com o layout linear, podemos ter mais certeza com relação ao posicionamento final dos widgets em diferentes tamanhos de tela, assim como não correremos mais o risco de um reposicionamento de um widget alterar completamente a interface. Há duas variações do Layout Linear: o vertical e o horizontal. Quando usamos o vertical, os widgets são colocados um abaixo do outro; quando usamos o horizontal, são colocados ao lado, em uma única linha. Veja a diferença entre eles na figura 45. FIGURA 45 – Comparação entre Layout Linear Vertical (esquerda) e Horizontal (direita) Fonte: Android Studio Aparentemente, o uso do LinearLayout parece ser bem limitado; afinal, no vertical, (esquerda na figura 45) você pode apenas colocar um widget abaixo do outro, e no horizontal (direita na figura 44), todos ficam na mesma linha, um ao lado do outro. Pág. 57 de 95 Porém, você pode mesclar o uso do layout linear horizontal com o vertical e criar telas em um estilo tabela. Dê uma olhada no exemplo da figura 46. FIGURA 46 – Uso do LayoutLinear horizontal combinado com o vertical Fonte: Android Studio Na figura 46, veja na Component Tree (no canto superior direito) que colocamos um Layout Linear Vertical com dois Layout Linear Horizontal empilhados, seguidos de um botão. Dentro dos dois layouts horizontais, colocamos, em linha, os TextViews e campos de entrada de texto necessários. A listagem deste exemplo de layout pode ser vista no quadro 13. Pág. 58 de 95 QUADRO 13 – Código para arquivo XML de layout com Linear Layout <?xml version=”1.0” encoding=”utf-8”?> <LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android” android:orientation=”vertical” android:layout _ width=”match _ parent” android:layout _ height=”match _ parent”> <LinearLayout android:orientation=”horizontal” android:layout _ width=”match _ parent” android:layout _ height=”wrap _ content”> <TextView android:layout _ width=”0dp” android:layout _ height=”wrap _ content” android:textAppearance=”?android:attr/textAppearanceLarge” android:text=”Celsius:” android:id=”@+id/textView3” android:layout _ weight=”1” android:gravity=”right” /> <EditText android:layout _ width=”0dp” android:layout _ height=”wrap _ content” android:inputType=”numberDecimal” android:ems=”10”android:id=”@+id/editText3” android:layout _ weight=”1”> <requestFocus/> </EditText> </LinearLayout> <LinearLayout android:orientation=”horizontal” android:layout _ width=”match _ parent” Pág. 59 de 95 android:layout _ height=”wrap _ content”> <TextView android:layout _ width=”0dp” android:layout _ height=”wrap _ content” android:textAppearance=”?android:attr/textAppearanceLarge” android:text=”Fahrenheit:” android:id=”@+id/textView4” android:layout _ weight=”1” android:gravity=”right” /> <EditText android:layout _ width=”0dp” android:layout _ height=”wrap _ content” android:inputType=”numberDecimal” android:ems=”10” android:id=”@+id/editText4” android:layout _ weight=”1” /> </LinearLayout> <Button android:layout _ width=”match _ parent” android:layout _ height=”wrap _ content” android:text=”Converter” android:id=”@+id/button2” /> </LinearLayout> 6.3. Menus e Caixas de Diálogo Para aplicativos novos, a Google recomenda o uso da ActionBar como menu dos aplicativos. A ActionBar é a barra existente no topo de um aplicativo Android (veja figura 47). Pág. 60 de 95 FIGURA 47 – ActionBar (em destaque) em um aplicativo Android Fonte: Android Studio Para poder usar a ActionBar é necessário possuir um arquivo XML que define os itens que ela contém. Também é preciso possuir dois métodos específicos implementados no código da Activity. Você não precisa criar o arquivo XML e os métodos manualmente: para tê-los automaticamente, no momento de criação do seu projeto, escolha o modelo Blank Activity para sua tela inicial (veja a figura 22 na seção 3.3). Os itens de menu da ActionBar são ações que devem ser definidas com a tag item, em um arquivo XML existente dentro da pasta res/menu. Todo novo projeto criado com o modelo de te;a Blank Activity já vem com um arquivo XML contendo um item de menu para abrir as preferências do aplicativo (caso existam). Veja seu conteúdo no quadro 14. QUADRO 14 – Código para arquivo XML do arquivo de menu res/menu/menu_main.xml <menu xmlns:android=”http://schemas.android.com/apk/res/android” xmlns:app=”http://schemas.android.com/apk/res-auto” xmlns:tools=”http://schemas.android.com/tools” tools:context=”com.example.professores.megasena.MainActivity”> <item android:id=”@+id/action _ settings” android:orderInCategory=”100” android:title=”@string/action _ settings” app:showAsAction=”never” /> </menu> Pág. 61 de 95 Em seguida, o que acontecerá quando um item for tocado deverá ser programado no evento onOptionsItemSelected, dentro da Activity (veja o quadro 15). QUADRO 15 – Código para o evento que trata o clique em cada um dos itens de menu na AppCompatActivity @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.action _ settings) { Toast.makeText(this, “Você tocou no item das configurações!”, Toast.LENGTH _ LONG).show(); // AQUI NESTE PONTO PODERÍAMOS ACRESCENTAR O CÓDIGO NECESSÁRIO PARA // ABERTURA DA TELA DE CONFIGURAÇÕES DO APLICATIVO return true; } return super.onOptionsItemSelected(item); } Para cada item criado no arquivo XML, é possível testar, dentro do onOptionsItemSelected, se ele foi pressionado e executar o procedimento adequado. No exemplo do quadro 15, apenas mostramos uma mensagem ao usuário. Veremos na próxima aula como abrir novas janelas – esse poderia ser o resultado final do clique do item de menu Settings. No caso de novos itens, você pode adicionar outros else if ao código ou simplesmente trocar o uso de if por switch . . .case. Uma caixa de diálogo pode ser criada facilmente no Android, por meio do uso da classe DialogFragment. Podem ser criados diálogos simples, com botões que o usuário pode utilizar para responder uma questão, por exemplo, ou diálogos mais sofisticados, com widgets como caixas de entrada de texto. Pág. 62 de 95 Para criar um diálogo com DialogFragment, precisamos criar uma subclasse desta. Isso pode ser feito dentro da própria classe da Activity – afinal, Java permite criar classes dentro de classes! Veja um exemplo no quadro 16, que pode ser colocado dentro de uma Activity. QUADRO 16 – Código para classe de criação de um diálogo, interna em uma Activity public static class FecharDialogFragment extends DialogFragment { static FecharDialogFragment newInstance() { return new FecharDialogFragment(); } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setMessage(“Deseja fechar esta tela?”) .setPositiveButton (“OK”, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // USUÁRIO CLICOU EM OK } }) .setNegativeButton (“Cancelar”, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // USUÁRIO CLICOU EM CANCELAR } }); return builder.create(); } } Agora, você pode chamar o diálogo no ponto em que desejar da sua Activity (como em um clique de botão) instanciando a classe criada e chamando o método show() no objeto criado, como pode ser visto no quadro 17. Pág. 63 de 95 QUADRO 17 – Código para exibir a caixa de diálogo criada no quadro 14 public void onClick(View view) { FecharDialogFragment fecharDialogFragment = FecharDialogFragment.newInstance(); fecharDialogFragment.show(getSupportFragmentManager(), “dialog”); } AULA 7 – INTENTS 7.1. Definição da classe Intent A classe Intent é usada quando desejamos realizar alguma ação que envolve outros componentes do aplicativo ou do sistema. Basicamente, é uma mensagem de solicitação, que será enviada a alguém requerendo, por exemplo, a abertura de uma janela, uma chamada telefônica ou a abertura do navegador em um determinado endereço. Provavelmente o uso mais comum de um Intent é a abertura de uma nova tela. Veja no diagrama da figura 48 como acontece esse processo. FIGURA 48 – Abertura de uma nova tela (Activity) usando Intent Fonte: <http://developer.android.com/guide/components/intents-fi lters.html> A partir da tela inicial (Activity A), usamos o comando startActivity() com uma Intent para sinalizar ao Android que desejamos abrir uma nova tela. O sistema operacional abre então a Activity B indicada na Intent e passa a execução ao evento onCreate() nela existente. Pág. 64 de 95 Veremos na próxima seção quais são os comandos necessários para realizar estas etapas. 7.2. Criando e abrindo uma nova tela com Intent Antes de tudo, para que possamos abrir outra tela em um aplicativo Android, é preciso haver uma classe Activity e um layout XML para ela. Embora esses dois arquivos possam ser criados individualmente, o Android Studio possui um assistente de criação de Activities que automatiza o processo de criação destes dois arquivos. Para criar uma nova tela no seu aplicativo, clique com o botão direito do mouse sobre a pasta app do seu projeto e, no menu que será exibido, selecione File > New >Activity . Escolha o modelo para a nova tela – pode ser Empty Activity, como indicado na figura 49. FIGURA 49 – Adicionando uma nova Activity ao projeto Fonte: Android Studio Em seguida (figura 50), dê um nome para sua nova Activity em Activity Name (procure sempre manter a palavra Activity ao final – é uma convenção dentro do Android nomear activities dessa forma). Note que à medida que você digita o nome da Activity, o nome do arquivo de layout (Layout Name) também muda de forma correspondente. Selecione o pacote adequado em Package name e clique em Finish. Pág. 65 de 95 FIGURA 50 – Adicionando uma nova Activity ao projeto Fonte: Android Studio Perceba que agora você possui uma nova classe Java na pasta java (dentro do primeiro pacote de classes) do projeto e um novo arquivo de layout em res\layout! E não é só
Compartilhar