Prévia do material em texto
PROGRAMAÇÃO CODING (MOBILE) Unidade 3 Gerenciando o APP android CEO DAVID LIRA STEPHEN BARROS Diretora Editorial ALESSANDRA FERREIRA Gerente Editorial LAURA KRISTINA FRANCO DOS SANTOS Projeto Gráfico TIAGO DA ROCHA Autoria LUIZ FERNANDO CORCINI 4 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 A U TO RI A Luiz Fernando Corcini Olá. Sou graduado em Engenharia Eletrônica, especializado em Administração de TI, mestre em Educação e Novas Tecnologias e Doutorando em Sistemas Tutores Inteligentes. Tenho experiência técnico-profissional na área de desenvolvimento e gestão da produção de software nas áreas de Gerenciamento de Processos Empresariais. Uso os recursos disponibilizados pela web há mais de 20 anos. Sou professor universitário há mais de 15 anos e já publiquei vários livros técnicos sobre assuntos voltados à área de informática. Sou apaixonado pelo que faço e adoro transmitir minha experiência de vida àqueles que estão iniciando em suas profissões. Por isso fui convidado pela Editora Telesapiens a integrar seu elenco de autores independentes. Estou muito feliz em poder ajudar você nessa fase de muito estudo e trabalho. Conte comigo! 5PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 ÍC O N ES Esses ícones aparecerão em sua trilha de aprendizagem nos seguintes casos: OBJETIVO No início do desenvolvimento de uma nova competência. DEFINIÇÃO Caso haja a necessidade de apresentar um novo conceito. NOTA Quando são necessárias observações ou complementações. IMPORTANTE Se as observações escritas tiverem que ser priorizadas. EXPLICANDO MELHOR Se algo precisar ser melhor explicado ou detalhado. VOCÊ SABIA? Se existirem curiosidades e indagações lúdicas sobre o tema em estudo. SAIBA MAIS Existência de textos, referências bibliográficas e links para aprofundar seu conhecimento. ACESSE Se for preciso acessar sites para fazer downloads, assistir vídeos, ler textos ou ouvir podcasts. REFLITA Se houver a necessidade de chamar a atenção sobre algo a ser refletido ou discutido. RESUMINDO Quando for preciso fazer um resumo cumulativo das últimas abordagens. ATIVIDADES Quando alguma atividade de autoaprendizagem for aplicada. TESTANDO Quando uma competência é concluída e questões são explicadas. 6 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 SU M Á RI O Ciclo de vida do aplicativo Android e classe Activity ............... 9 Introdução ............................................................................................................. 9 Gerenciando aplicativos ...................................................................................11 Ciclo de vida do aplicativo Android ................................................................11 A classe Activity ...................................................................................................14 Navegabilidade ........................................................................ 24 Introdução ...........................................................................................................24 Chamando a segunda Activity ..........................................................................30 Intenção de chamada .........................................................................30 Evento de chamada ............................................................................31 Passagem de parâmetros entre telas.................................... 36 Entendendo a passagem de parâmetros entre as telas ........................... 36 Inserindo componentes na tela ............................................. 46 Entendendo o leitor de layout .........................................................................47 TextView ................................................................................................................56 Plain Text ..............................................................................................................62 Button ...................................................................................................................63 Radio Button .......................................................................................................65 Check Box e Combo Box .....................................................................................69 7PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 A PR ES EN TA ÇÃ O Seja bem-vindo à Unidade 3 da disciplina de Programação Coding Mobile. Nesta unidade, usaremos os conhecimentos adquiridos anteriormente e aprenderemos a criar e gerenciar uma aplicação básica em JavaAndroid. O conteúdo está dividido em quatro módulos. No primeiro capítulo, você entenderá como funciona o ciclo de vida da aplicação mobile Android e como implementar uma classe Activity. Em seguida, estudaremos a navegabilidade, isto é, como implementar uma aplicação Android com várias telas e como fazer uma tela chamar a outra. No terceiro capítulo, aprenderemos a passar parâmetros entre uma tela e outra da aplicação, construindo, assim, uma aplicação mais complexa e robusta. Finalmente, no capítulo 4, veremos como inserir alguns dos componentes básicos em uma aplicação Android para que ela fique mais interativa. É claro que existe muito mais para aprender, mas o aprofundamento de cada um desses conhecimentos pode ser feito acessando os links indicados durante o texto, no tópico Saiba Mais. Vamos começar? Excelente estudo para você! 8 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 O BJ ET IV O S Olá. Seja muito bem-vindo à Unidade 3. Nosso objetivo é auxiliar você no desenvolvimento das seguintes competências profissionais até o término desta etapa de estudos: 1. Entender o ciclo de vida de um aplicativo desenvolvido para Android e a classe Activity. 2. Aplicar os recursos da linguagem Java para proporcionar a navegabilidade de aplicativos para dispositivos móveis, com base no Android. 3. Transmitir parâmetros entre as telas de um aplicativo desenvolvido na linguagem Java para dispositivos móveis Android. 4. Codificar e tratar eventos acionados pelo usuário e pela máquina em aplicativos Android, por meio da linguagem Java Mobile. 9PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Ciclo de vida do aplicativo Android e classe Activity OBJETIVO Ao término deste capítulo, você será capaz de en- tender como acontece o ciclo de vida do aplicativo Android, bem como a classe Activity. Agora que você já está com o ambiente de desen- volvimento Java-Android instalado e configurado em seu computador, além de já ter certa familia- ridade com a linguagem Java, podemos chegar ao entendimento de como funcionam os apps An- droid. Vamos lá! Introdução A maioria das aplicações Android requer uma interface que possibilite a interação com o usuário, também conhecida como UI (User Interface). Essa interface pode ser composta por uma ou mais telas, nas quais elementos como botões, caixas de texto, figuras, animações, caixas de seleção, entre outros, são apresentados. É crucial ressaltar que cada atividade (classe Activity) representa uma única tela (UI) do aplicativo e é encarregada de gerenciar (tratar) os eventos que o usuário pode gerar em cada elemento apresentado, como clicar em um botão, digitar um texto ou selecionar um item. No caso de aplicações que demandam mais de uma tela, é necessário implementar mais de uma atividade. Por exemplo, um aplicativo de e-mail deve ter uma atividade que exiba a lista de e-mails, outra dedicada a permitir que o usuário redija um novo e-mail e ainda outra para mostrar o conteúdo do e-mail, proporcionando ao usuário a leitura do mesmo. 10 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Apesar das atividades de uma mesma aplicação trabalha- rem juntas para compor as funcionalidades de um aplicativo, elas são independentes umas das outras e podem ser iniciadas indivi- dualmente caso a configuração do aplicativo permita. Uma característicaespecial dos aplicativos Android é que uma aplicação pode iniciar qualquer componente instalado no aplicativo e utilizar seus recursos, se assim estiver configurado. SAIBA MAIS Uma nova aplicação pode necessitar da captura de uma foto utilizando o dispositivo de câmera. Para realizar esta tarefa, essa nova aplicação pode recorrer a um aplicativo já existente, evitando a necessidade de implementar essa funcionalidade por conta própria. Em outras palavras, ela pode utilizar os recursos de uma aplicação já existente sem precisar incorporá-la ou estar vinculada a ela de alguma maneira. Para alcançar isso, a nova aplicação apenas precisa ser capaz de iniciar a atividade de captura de foto da outra aplicação. Assim que a atividade de captura de foto for concluída, a imagem é retornada para a nova aplicação, onde pode ser tratada e utilizada de acordo com as necessidades do programador. Um detalhe importante a considerarmos é que, pelo fato de cada aplicação rodar em processos separados, com restrição de acesso, uma aplicação não pode iniciar diretamente outra. Para fazer isso, ela manda uma mensagem ao sistema Android indicando a intenção de iniciar a outra atividade, o qual pode decidir se atende ou não a essa intenção. Cada mensagem de intenção passada para o sistema Android é chamada de “Intent” e será estudada em detalhes mais adiante, bem como os processos de ativação de componentes. 11PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Gerenciando aplicativos É importante entendermos que os dispositivos móveis precisam gerenciar cuidadosamente a utilização de seus recursos, principalmente a memória, pois normalmente tais recursos são bem limitados. Assim, o sistema operacional gerencia as aplicações na forma de uma pilha – “stack applications” ou, em português, “pilha de aplicações”. A aplicação que está no topo da pilha é a que está sendo executada e visualizada. As outras permanecem com status de “paradas temporariamente” (pause) ou “paradas definitivamente” (stop) e não podem ser visualizadas até que voltem a estar em primeiro lugar no topo da pilha. Além disso, o aplicativo com status pause ou stop pode, a qualquer momento, ser descartado (encerrado) pelo sistema operacional para liberar mais memória, caso a utilização desse recurso atinja um limite crítico. Cada aplicativo tem seu ciclo de vida bem definido e pode ter vários estados (status) desde o início de sua execução até ser descartado pelo usuário ou pelo próprio sistema operacional. O tópico a seguir apresenta como funciona o ciclo de vida de uma aplicação. Ciclo de vida do aplicativo Android Para os dispositivos móveis que utilizam a plataforma Android, o ciclo de vida dos aplicativos deve seguir as seguintes etapas: quando o usuário clica sobre o ícone da aplicação, ela é criada e passa a utilizar recursos do sistema operacional do dispositivo. Nesse contexto, o termo “criar” (create) não tem o sentido de “implementar” ou “desenvolver”, mas de “instanciar”, isto é, ser executado e passar a ocupar um espaço de memória, utilizando recursos do sistema. 12 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Quando um aplicativo é executado, ele chama o método onCreate, que é obrigatório e é executado uma única vez durante o ciclo de vida da aplicação. Esse método define o que deve ser feito, qual interface vai ser utilizada e quais são os componentes dela. Para entrar em operação e poder ser utilizado, o aplicativo, depois de criado, precisa ser iniciado. Quando isso acontece, o método onStart é chamado. Ele não é obrigatório, mas podemos utilizá-lo para capturar o evento de inicialização da aplicação. O aplicativo deve, então, ser colocado no topo da pilha de aplicativos, para que seja visualizado e controlado pelo usuário. Esse evento pode ser capturado pelo método onResume. Caso outro aplicativo seja iniciado, o aplicativo anterior é parado temporariamente (paused) e vai ao segundo lugar da pilha de aplicativos. Esse evento é capturado pelo método onPause, o qual pode ser implementado para salvar o estado (atributos) do aplicativo, antes que ele passe para a situação de parado temporariamente. Esse é um método muito útil, pois, caso a aplicação volte ao topo da pilha, é necessário saber qual era sua situação e quais eram seus dados antes de ser temporariamente parado. Para voltar a utilizar o aplicativo que está parado temporariamente, é preciso recolocá-lo no topo da pilha. Isso só acontece se o outro aplicativo que tomou seu lugar no topo da pilha for descartado ou parado temporariamente. Quando isso acontece, o método onResume entra em ação novamente. O aplicativo que está parado temporariamente (paused) pode ser parado definitivamente (stop), e o método que captura esse evento é o onStop. Uma vez parado, o usuário só conseguirá utilizar novamente o aplicativo se reiniciá-lo. Se isso acontecer, o método 13PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 onRestart será chamado, capturando, assim, o evento e passando o controle para o método onStart. Depois de parado, o aplicativo pode ser retirado da pilha, isto é, ser descartado. Quando isso acontece, o método onDestroy é chamado, e o ciclo de vida da aplicação termina. Nessa perspectiva, para ter acesso a esse aplicativo depois de ele ter sido retirado da pilha, o usuário deve recriá-lo, fazendo com que outro ciclo de vida tenha início. Vejamos o diagrama de transição de estado a seguir, que representa esse ciclo. Imagem 3.1 – Ciclo de vida dos aplicativos Android CRIADO DESTRUÍDO INICIADO EM EXECUÇÃO PARADO TEMPORARIAMENTE PARADO DEFINITIVAMENTE 1 2 3 4 6 9 8 10 5 Fonte: Elaborada pela autoria (2023). Para entendermos melhor a imagem apresentada, podemos fazer uso da seguinte legenda: 1. Método onCreate - chamado quando o usuário clica sobre o ícone da aplicação. 2. Método onStart - chamado quando a aplicação se torna visível para o usuário. 3. Método onResume - chamado quando a aplicação está no topo da pilha. 14 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 4. Método onPause - chamado quando a aplicação sai do topo da pilha e fica parada temporariamente por causa da execução de outra aplicação. 5. Método onResume - chamado quando a aplicação que foi parada temporariamente volta a ser requisitada. 6. Método onStop - chamado quando a aplicação está sendo encerrada. 7. Método onRestart - chamado quando a aplicação precisa ser iniciada outra vez. 8. Método onDestroy - chamado para encerrar a execução da aplicação. 9. Método onDestroy - nesse caso, a aplicação está sendo encerrada não pelo usuário, mas sim pelo SO para liberar memória. 10. Aplicação descartada. Todos esses métodos listados fazem parte da classe Activity, a qual é utilizada pelo sistema operacional Android para ajudar a gerenciar o ciclo de vida dos aplicativos. A seguir veremos mais detalhes sobre essa classe. A classe Activity A classe Activity define as atividades do projeto. É a classe-mãe, ou a superclasse, que define as características e os comportamentos básicos para qualquer atividade criada para o projeto. Assim, cada atividade é responsável por fornecer uma tela com a qual o usuário pode interagir para realizar alguma ação, como digitar um número de telefone, tirar uma foto, ler um e-mail, incluir, alterar ou excluir os dados de um contato. 15PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 A interface criada na atividade pode preencher a tela inteira do dispositivo, o que normalmente acontece, ou pode flutuar sobre outras telas. Com base no exposto nos itens anteriores, sobre os métodos do ciclo de vida de um app Android, a classe Activity pode ser representada, segundo o padrão UML, da seguinte maneira: Imagem 3.2 – Representação gráfica da classe Activity CLASSE Activity ... onCreate() onStart() onResume() onPause() onRestart() onStop() onDestroy() ... Fonte: Elaborada pela autoria com base no app Android (2023). Naturalmente, como não mencionamosos atributos, a lista de atributos da classe Activity ainda é desconhecida, por isso foi colocada como sendo “...”. Da mesma forma, pode ser que a classe Activity tenha mais métodos que os mencionados; por esse motivo, após o método onDestroy, também foi colocado “...”. EXEMPLO: é importante salientarmos que podem acontecer modificações à medida que são feitas as atualizações. Agora, considerando essa informação, abra o Android Studio e crie um novo projeto, clicando no item “Start a new Android Studio Project”, destacado na imagem a seguir. 16 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Imagem 3.3 – Criando um novo projeto Android Fonte: Elaborada pela autoria (2023). Em seguida, defina o nome da aplicação como App1_U3, a dizer que essa é nossa primeira aplicação criada na Unidade 3 desta disciplina, conforme apresentado a seguir. 17PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Imagem 3.4 – Definindo o nome da aplicação Fonte: Elaborada pela autoria (2023). Deixe os demais campos como estão e clique em “Next”. Marque a opção “Phone and Tablet” e selecione a “API15”, como mostrado anteriormente e clique em “Next”. IMPORTANTE Caso você não se recorde do motivo pelo qual está fazendo essas seleções, reveja o material estudado nas outras unidades desta disciplina. 18 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 A tela a seguir deve aparecer. Imagem 3.5 – Adicionando a Activity ao projeto Fonte: Elaborada pela autoria (2023). Selecione a “Empty Activity” e clique em “Next”. A tela a seguir deve ser apresentada. Imagem 3.6 – Classe Activity do projeto Fonte: Elaborada pela autoria (2023). Com os conhecimentos que você adquiriu nas unidades anteriores sobre linguagem Java, você pode entender o código apresentado antes. Mesmo assim, vamos detalhá-lo a seguir. 19PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 • A linha 1 define o pacote em que se encontra a classe Activity que estamos visualizando. • A linha 6 declara a classe MainActivity (Atividade principal), que vai gerenciar a tela principal de nosso aplicativo, pois, como vimos anteriormente, cada tela é gerenciada por uma classe Activity. É importante também verificarmos que a classe MainActivity herda (extends) características e comportamentos da classe AppCompatActivity. • Na linha 8, existe uma expressão informando que o método a seguir é uma sobrescrita. Assim, usamos @ Override toda vez que substituímos um método. Quanto a isso, conforme Singh (2017), seu uso fornece dois benefícios: 1. Indicar, com certeza, que você realmente está substituindo o método que deseja. Caso você cometa um erro comum ao digitar incorretamente o nome de um método ou não corresponder exatamente aos parâmetros, você será avisado de que o método não está realizando a substituição da forma como você está pensando. 2. Tornar o seu código mais fácil de entender, porque é mais óbvio quando os métodos são sobrescritos. • A linha 9 mostra o método onCreate sendo declarado. Esse método copia o método da classe-mãe AppCompatActivity. • Na linha 10, ocorre a chamada ao método onCreate da classe-mãe. • Na linha 11, é definido o layout para a Activity que está sendo criada. 20 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Verificando o conteúdo da classe MainActivity, descrita anteriormente, podemos perceber que apenas o método onCreate está sendo utilizado, pois somente ele é obrigatório. Como vimos, existem outros seis métodos que completam o ciclo de vida de uma aplicação, os quais podem ser utilizados para permitir ao programador maior controle sobre a aplicação que está desenvolvendo. Portanto, se você executar a aplicação, o resultado deve ser o mostrado na imagem a seguir. Imagem 3.7 – AVD da execução do projeto Fonte: Elaborada pela autoria (2023). O exemplo a seguir apresenta o código que deve ser implementado em seu projeto (na classe MainActivity) para dar uma noção do funcionamento da atividade quando ela possui todos os métodos de controle do ciclo de vida da aplicação. 21PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Para tanto, implemente o seguinte código na sua classe MainActivity, apresentado na imagem a seguir: Imagem 3.8 – Exemplo dos métodos de gerenciamento de aplicações de app Android Fonte: Elaborada pela autoria (2023). Esse código apresentado não tem função prática alguma, a não ser permitir que você entenda como funciona o gerenciamento do ciclo de vida de aplicativos Android. 22 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Agora salve e execute a aplicação. Para verificar o resultado, abra a janela chamada “Run”, como mostrado na imagem a seguir, e verifique os itens em destaque. Imagem 3.9 – Resultado da execução do código do exemplo Fonte: Elaborada pela autoria (2023). O AVD deve estar como mostra a imagem a seguir: Imagem 3.10 – AVD do exemplo Fonte: Elaborada pela autoria (2023). 23PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Para verificar o resultado da execução dos métodos, clique em um dos botões em destaque na imagem anterior. IMPORTANTE Compare o resultado apresentado na janela “Run” com o diagrama de transição de estado (Imagem 3.1). RESUMINDO E então? Gostou do que lhe mostramos? Aprendeu mesmo tudinho? Agora, só para termos certeza de que você realmente entendeu o tema de estudo deste capítulo, vamos resumir o que vimos. Aqui, você conheceu o ciclo de vida do aplicativo Android, bem como a classe Activity. Espero que você tenha aprendido muitos conceitos novos enriquecedores ao seu conhecimento. Avante! 24 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Navegabilidade OBJETIVO Ao término deste capítulo, você será capaz de entender como funciona a navegabilidade do aplicativo Android. Então, animado com mais uma etapa de estudos? Vamos lá! Introdução Aplicativos mais complexos normalmente possuem mais de uma tela ou precisam chamar outros aplicativos para executar uma função especializada. Vamos aprender agora a criar novas telas (Activity) para um mesmo aplicativo, a navegar entre elas e também a permitir que a tela de um aplicativo (Activity) chame outro aplicativo (Activity). Nessa perspectiva, os métodos utilizados para iniciar uma nova tela (Activity) são os seguintes: startActivity e startActivityForResult. Lembre-se de que cada tela de um aplicativo é uma classe Activity e que a linguagem Java diferencia letras maiúsculas de letras minúsculas. Dessa forma, o método startActivity não pode ser escrito como “startactivity”. A decisão de utilizar um desses dois métodos deve recair sobre a seguinte questão: a tela (Activity1) que está chamando a outra (Activity2) precisa de um retorno ou um vínculo para poder continuar suas atividades depois que a tela chamada (Activity2) for fechada? Em caso de resposta positiva, devemos utilizar o método startActivityForResult. Mas, se esse não for o caso e a tela (Activity1) que está chamando a outra tela (Activity2) não precisar de vínculo ou retorno, devemos utilizar o método startActivity. Vejamos as imagens a seguir, que representam graficamente esses dois casos. 25PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 • Uso do método startActivity. Imagem 3.11 – Activity1 não precisa de retorno da Activity2 depois que a última for fechada e o foco retornar para a primeira Activity 2Activity 1 Tela simples com botão. Fonte: Elaborada pela autoria (2023). • Uso do método startActivityForResult: Imagem 3.12 – Activity1 precisa de retorno da Activity2 depois que a última for fechada e o foco retornar para a primeira Activity 2Activity 1 Ligação telefônica Fonte: Elaborada pela autoria (2023). Para entendermos melhor algumas características necessárias à navegabilidade correta entre as telas de um aplicativo Android, vamos verificar o exemplo a seguir. Devemos criar um novo projeto Android, chamado App2_U3 nos mesmos moldes que o App1_U3. Para fazer isso, você pode fechar o projeto App1_ U3, que está aberto, ou selecionar a opçãodo menu “File- >New -> New Project...”, como mostra a imagem a seguir. 26 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Imagem 3.13 – Criando o projeto App2_U3 Fonte: Elaborada pela autoria (2023). Note que esse novo projeto, a exemplo do anterior, possui apenas uma Activity (tela), chamada de MainActivity, ou tela principal. Agora crie mais duas telas (Empty Activity) dentro do novo projeto (pacote App2_U3) com as seguintes características: • Primeira tela – Nome da atividade: Tela2. • Segunda tela – Nome da atividade: Tela3. Para fazer isso, clique com o botão direito do mouse sobre o app e selecione new->Activity->Empty Activity, conforme mostra a imagem a seguir. 27PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Imagem 3.14 – Inserindo uma nova Activity no projeto Fonte: Elaborada pela autoria (2023). Assim, o seu projeto deve ficar como mostra a imagem a seguir. 28 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Imagem 3.15 – Projeto com três Activities ou telas Fonte: Elaborada pela autoria (2023). Agora salve, execute o projeto e verifique se apenas a atividade principal fica visível e se as duas outras atividades (tela2 e tela3) não estão acessíveis. Para verificar o porquê de isso acontecer, precisamos analisar o arquivo AndroidManifest.xml, cujo código é apresentado a seguir. 29PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Imagem 3.16 – Arquivo AndroidManifest.xml do projeto App2_U3 Fonte: Elaborada pela autoria (2023). Repare que apenas a atividade principal (MainActivity), na linha 12, possui o . Esse fragmento de código tem dois atributos: (1) ação (action), cuja função é definir se a atividade pode ser uma atividade principal do aplicativo; e (2) categoria (category), que define se o usuário pode iniciar a atividade diretamente a partir do menu de aplicativos. NOTA Para ter acesso ao menu de aplicativos, basta cli- car sobre a região marcada em vermelho, na ima- gem a seguir, e arrastar para cima. Os aplicativos implementados até o momento estão destacados em azul. 30 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Imagem 3.17 – Abrir o menu de aplicativos Fonte: Elaborada pela autoria (2023). Chamando a segunda Activity Intenção de chamada Para chamarmos a segunda tela (atividade) da aplicação, é necessário utilizar o objeto Intent. Esse objeto será descrito em detalhes adiante, portanto aqui será feita apenas uma breve introdução de sua sintaxe para permitir o funcionamento correto da aplicação em questão. Logo, para declarar uma chamada a outra atividade do mesmo aplicativo, devemos usar o seguinte fragmento de código: Intent a = new Intent(this, Tela2.class); startActivity(a); 31PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Nesse fragmento, podemos verificar, na primeira linha, a declaração de um objeto Intent “a”, que define a intenção de iniciar uma nova atividade, chamada Tela2.class. Já na segunda linha, vemos a utilização do comando startActivity, indicando como parâmetro a intenção de chamada. Como foi visto no princípio deste capítulo, o comando startActivity inicia uma atividade e não espera retorno algum dela. Evento de chamada Normalmente, a chamada a outra atividade ocorre como consequência de um evento realizado pelo usuário, como clicar em um botão ou qualquer outra interação do usuário com o layout, definida pelo programador. Dessa forma, a simples implementação do código apresentado no item Intent não vai iniciar uma nova atividade, pois o evento que dispara essa ação não foi definido. Apesar de o assunto layout ser tratado mais adiante neste material, vamos ver a seguir o fragmento de código que mostra como inserir um botão e permitir que ele “escute” e reaja, executando a chamada desejada: Button b = new Button(this); b.setText = “ok”; Essas duas linhas de código declaram um objeto do tipo Button (botão) e definem “ok” como sendo o texto que deve apa- recer no botão. Porém, a aplicação precisa saber que esse botão deve ser “ouvido” quando for clicado para executar uma nova ta- refa. Dessa forma, devemos inserir a seguinte linha de código ao fragmento anterior: 32 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 b.setOnClickListener(this); Com essa linha adicionada ao código, quando o botão for clicado, o método onClick será chamado, e, dentro dele, podemos declarar a intenção (Intent) de chamar a nova tela. Toda vez que permitimos que um botão reaja a um clique, devemos implementar o método onClick para definir o que ele deve fazer quando for clicado. Desse modo, dentro da própria atividade, devemos criar um método onClick, assim: public void onClick(View v) { Intent i = new Intent(this, Tela2.class); startActivity(i); } Podemos também modificar o código do exemplo anterior (App2_U3) para incluir um botão na atividade principal (MainActivity) que chame a atividade 2 (Tela2), conforme explicado anteriormente. O botão deve ter como rótulo o texto “Clique Aqui”. Nesse exemplo, modificamos também o código da segunda atividade (Tela2) para que apresente a seguinte mensagem na caixa de texto: “Esta é a segunda tela da aplicação”. Logo, o código completo da atividade da tela principal do aplicativo deve ficar da seguinte maneira: 33PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Imagem 3.18 – Código para o exemplo anterior Fonte: Elaborada pela autoria (2023). Veja que foi necessário inserir várias linhas e modificar algumas outras. Não se preocupe em entender tudo isso agora. Esse exemplo foi apenas para que você entenda as bases da funcionalidade de apps Android. Perceba também que, na linha 21, da imagem anterior, o método startActivity é utilizado para chamar a atividade 2 (Tela2) da aplicação. Ela foi utilizada porque a tela principal não precisa, nesse caso, de retorno. Se você salvá- 34 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 lo e executá-lo, o AVD deve se parecer com o mostrado na imagem a seguir. Imagem 3.19 – Resultado do exemplo anterior Fonte: Elaborada pela autoria (2023). Note que, ao abrir, a tela principal mostra o botão que preenche todo o espaço definido no layout. Clicando sobre o botão, a segunda tela é apresentada toda em branco. Conforme já estudamos, logo que a segunda tela é aberta, a primeira tela para temporariamente (pause) e fica em segundo plano. Nesse momento, ambas as telas ocupam espaço na memória, além de recursos do dispositivo. Pressionando a tecla “Voltar”, em destaque na imagem mostrada, a segunda tela para temporariamente (pause), depois definitivamente (stop) e, por fim, é destruída (destroy). Já a primeira tela volta ao primeiro plano (resume). Nesse momento, apenas a tela principal ocupa espaço na memória e nos recursos do dispositivo. Pressionando mais uma vez a tecla “Voltar”, a primeira tela para temporariamente (pause), depois para definitivamente 35PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 (stop) e, por fim, é destruída (destroy), liberando toda a memória utilizada para a aplicação. Em relação a isso, você pode estar pensando que um botão que ocupa todo o espaço da tela não adianta muita coisa. Seria interessante colocar mais componentes em uma mesma tela. Perfeito! Você tem toda a razão! Logo aprenderemos a fazer isso. No próximo capítulo, veremos como fazer uma tela “conversar” com a outra por meio de parâmetros e como manipular layouts. Sigamos em frente! RESUMINDO E então? Gostou do que lhe mostramos? Aprendeu mesmo tudinho? Agora, só para termos certeza de que você realmente entendeu o tema de estudo deste capítulo, vamos resumir o que vimos. Aqui, você aprendeu tudo sobre a navegabilidade, a intenção e o evento de chamada. Esperamos que tenha gostado do conteúdo apresentado. Avante! 36 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Passagem de parâmetros entre telas OBJETIVO Ao término deste capítulo, você será capaz de en- tender como funciona a passagem de parâmetros entre telas. Animado para este novo conhecimen- to? Vamos lá! Entendendoa passagem de parâmetros entre as telas A passagem de parâmetros a ser estudada agora não cria vínculo entre as telas. Seu foco é a passagem de um ou mais parâmetros para a próxima tela, e não o retorno de parâmetros, por isso o método utilizado ainda será o startActivity, não o startActivityForResult. Para passar parâmetros entre telas, é necessário utilizarmos o objeto Bundle (android.os.Bundle). A palavra “bundle” pode ser traduzida como “pacote” ou “embrulho”, e essa é exatamente a sua função, ou seja, servir como um embrulho ou um pacote com os dados que precisam ser passados de uma atividade para outra. Assim, para definirmos um objeto do tipo Bundle, utilizamos a seguinte sintaxe: Bundle = new Bundle; Um exemplo seria: Bundle pacote_de_dados = new Bundle; 37PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Porém, é necessário definirmos o conteúdo desse pacote de dados, e, para tanto, precisamos utilizar o comando putString da seguinte forma: pacote_de_dados.putString(“msg”, “Olá”); Na linha de código anterior, um dado do tipo string chamado “msg” e de conteúdo “Olá” está sendo adicionado ao “pacote de dados”. Nesse sentido, podem ser adicionados vários dados a um mesmo pacote de dados. No entanto, uma vez que o seu conteúdo esteja definido, é necessário incorporá-lo a uma intenção de chamada, pois ele de nada vale se não for passado adiante. Dessa forma, utilizamos o método putExtras para incorporar o pacote de dados a uma Intent: i.putExtras(pacote_de_dados); startActivity(i); O código completo fica assim: 38 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 … { //declara a intenção “i” para chamar outra tela (activity) Intent i = new Intent(this, tela2.class); //declara um pacote de dados que deve ser enviado para a tela a ser chamada Bundle pacote_de_dados = new Bundle(); //determina que o conteúdo do pacote de dados é um dados chamado “msg” //cujo conteúdo é “Olá”. pacote_de_dados.putString(“msg”, “Olá”); //insere o pacote de dados na intenção de chamada “i” i.putExtras(pacote_de_dados); //chama a nova atividade, definida pela intenção “i”. startActivity(i); } Muito legal, não é? Agora você já sabe como passar parâmetros para uma nova tela. Mas isso é só o começo! Vamos acompanhar o próximo exemplo para esclarecer melhor como funciona todo o processo. Crie um novo projeto de app, chamado App3_U3. A Activity principal deve ser do tipo “Empty Activity”, com o nome de Principal. Depois de aberto, o código da tela principal (classe Principal.java) do seu projeto deve se parecer com o mostrado na imagem a seguir. 39PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Imagem 3.20 – App3_U3 – Código da classe Principal.java Fonte: Elaborada pela autoria (2023). A primeira coisa a fazer é alterar o código anterior para que fique idêntico ao apresentado na imagem 3.20. Assim, podemos mencionar que, na imagem 3.22, foram destacados os “imports” de bibliotecas e o método onCreate, para que você perceba claramente as alterações necessárias. A imagem a seguir mostra o código anterior (3.20) com as alterações necessárias para ficar igual ao código da imagem 3.20. Preste atenção às modificações em destaque. 40 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Imagem 3.21 – App3_U3 – Código da classe Principal.java Fonte: Elaborada pela autoria (2023). Muito bem. O próximo passo é inserirmos as modificações referentes à passagem de parâmetros entre as telas. O nosso código fica assim: 41PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Imagem 3.22 - App3_U3 – Código da classe Principal.java Fonte: Elaborada pela autoria (2023). Em vermelho, estão destacadas as linhas que foram alteradas ou incluídas. Vamos, então, entender o código. Ao ser iniciado, o aplicativo deve executar a função onCreate, na linha 14, como já foi explicado no ciclo de vida dos apps Android. Dentro do método onCreate, um botão “b” deve ser criado; para ele, é definido o texto “Clique Aqui” (linha 15). Já na linha 16, definimos que esse botão deve “escutar” uma ação de click, isto é, a partir da execução dessa linha de código, o botão “b” deve reagir, chamando o método onClick quando for acionado. Então, o método onClick executa as seguintes atividades: 42 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 //declara a intenção “i” para chamar outra tela (activity) Intent i = new Intent(this, tela2.class); //declara um pacote de dados que deve ser enviado para a tela a ser chamada Bundle pacote_de_dados = new Bundle(); //determina que o conteúdo do pacote de dados é um dado chamado “msg”, cujo conteúdo é “Olá”. pacote_de_dados.putString(“msg”, “Olá”); //insere o pacote de dados na intenção de chamada “i” i.putExtras(pacote_de_dados); //chama a nova atividade, definida pela intenção “i”. startActivity(i) Você deve ter percebido que, depois de toda essa explicação, ainda não existe a Tela2, necessária para o funcionamento correto do código descrito. Então, vamos inserir uma nova tela (Activity) chamada de Tela 2. Ela deve ter o seguinte código: 43PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Imagem 3.23 - App3_U3 – Código da classe Tela2.java Fonte: Elaborada pela autoria (2023). Vamos compreender melhor o código da imagem 3.23. Ao ser criada, a Tela2 deve executar o código que está definido dentro do método onCreate, como você já sabe. Na linha 13 desse código, é definida uma caixa de texto (TextView), de nome “txt”. Na linha 14, é definida uma variável com o nome de “msg_recebida”, e a ela é atribuído o conteúdo vazio. Já na linha 15, é definido um objeto “Intent”, que, nesse caso, serve para capturar a intenção de chamada realizada pela tela principal. Na linha 16, verifica-se se a intenção de chamada capturada não está vazia (nula). Caso 44 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 não seja nula, é executada a linha 18, a qual captura um suposto pacote, enviado pela tela principal, nessa intenção de chamada. Perceba que o pacote pode estar vazio, isto é, a intenção de chamada pode existir, mas não necessita possuir parâmetros. Essa verificação é feita na linha 19, e, caso exista algum pacote de dados embutido nessa intenção de chamada, ele é capturado na linha 21. Por fim, a linha 24 define o conteúdo para a caixa de texto “txt” definida no início do código, e, na linha 25, o layout, composto por essa caixa de texto, é apresentado na tela do dispositivo. Salvando e executando o código, obtemos o seguinte resultado: Imagem 3.24 – Resultado do exemplo – Passagem de parâmetros entre telas Fonte: Elaborada pela autoria (2023). 45PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Que tal? Esperamos que perceba como os conceitos e os códigos estudados nas unidades anteriores desta disciplina estão sendo aplicados agora. Vamos em frente! RESUMINDO E então? Gostou do que lhe mostramos? Aprendeu mesmo tudinho? Agora, só para termos certeza de que você realmente entendeu o tema de estudo deste capítulo, vamos resumir o que vimos. Aqui, você aprendeu sobre a passagem dos parâ- metros entre as telas. Esperamos que você tenha gostado do conteúdo apresentado. Avante! 46 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Inserindo componentes na tela OBJETIVO Ao término deste capítulo, você será capaz de entender os passos para inserir os componentes na tela do aplicativo Android. E aí, animado para mais um desafio? Vamos lá! O Android Studio permite trabalhar com uma grande variedade de componentes. Neste material, apresentaremos os mais comuns. Conforme visto anteriormente, a estrutura dos projetos Android separa o layout (interface com o usuário) do código responsável por ação, reação e regras de negócio tratadas pela tela, sendo o primeiro definido em um arquivo xml e o último, em uma classe Activity (em linguagem Java). Para entendermos melhor esse assunto, vamos criar um novo projeto no Android Studio na versão Android 4.0.3. É importante salientarmos que pode haver mudanças nas versões maisrecentes dos conceitos que serão apresentados. Vamos, então, revisar os passos em detalhes, como apresentado a seguir: 1. Abra o Android Studio e crie uma nova aplicação Android. 2. Defina o nome da aplicação como “App4_U3”. 3. Selecione o dispositivo Phone and Tablet e a API15: Android 4.0.3 IceCreamSandwich. 4. Escolha uma “Empty Activity”, exatamente como foi feito nos exemplos anteriores, e dê o nome de “Principal”. 5. Depois de o projeto estar carregado, clique em executar (Run), selecione o AVD para exibir o app, e o resultado deve ser como o apresentado a seguir: 47PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Imagem 3.25 – AVD do exemplo Fonte: Elaborada pela autoria (2023). Até aqui, você já sabe o que fazer. Vamos, então, aprofundar nosso conhecimento. Entendendo o leitor de layout Nesse ponto, é necessário explicarmos como funciona o editor de layout disponibilizado pelo Android Studio, além de verificar como cada alteração de layout em uma Activity (tela do app) impacta o código xml correspondente. Sendo assim, selecione o arquivo xml referente ao layout da aplicação, clicando em app -> res -> layout e escolhendo o arquivo activity_principal.xml, como mostrado na imagem a seguir. 48 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Imagem 3.26 – Selecionando o arquivo xml de layout da tela do dispositivo Fonte: Elaborada pela autoria (2023). Ao selecionar o arquivo de layout, conforme demonstrado anteriormente, o Android Studio apresenta o editor de layout. Esse recurso permite que você crie o layout desejado para cada uma das telas de sua aplicação, clicando e arrastando elementos para um preview de tela do AVD escolhido. O editor de layout de nosso app é apresentado na imagem a seguir. 49PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Imagem 3.27 – Editor de layout do app Fonte: Elaborada pela autoria (2023). Na parte superior da imagem anterior, estão destacados em vermelho o AVD, a API e o tema que utilizaremos nesse projeto. Quanto a isso, é possível que o tema de seu projeto ainda não esteja definido como na imagem 3.27; logo, clique sobre o tema e o selecione para ficar igual ao apresentado na referida imagem, pois, assim, os resultados apresentados neste material serão os mesmos que você obterá no seu computador. Ao clicar no tema, uma tela de seleção será apresentada; então, selecione o tema “Light”, como mostrado na imagem a seguir. 50 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Imagem 3.28 – Seleção de tema para o app Fonte: Elaborada pela autoria (2023). Como vimos, no canto inferior esquerdo da imagem 3.27, há duas abas em destaque. A primeira (Design) mostra o editor de layout, enquanto a segunda (Text) mostra o arquivo xml correspondente ao layout. Ao clicar na aba Text, você terá uma visão do arquivo xml, conforme apresentado na imagem a seguir. Imagem 3.29 – Arquivo xml correspondente ao layout da tela do app Fonte: Elaborada pela autoria (2023). 51PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Como comentamos antes, cada tela (Activity) possui um arquivo xml de layout. Note que o elemento “TextView”, que visualizamos na imagem 3.27, com o conteúdo “Hello World”, aparece no arquivo xml (da linha 9 até a linha 16) e que esse conteúdo está definido na linha 12. Agora experimente trocar o conteúdo desse elemento para “Tela Principal”, da seguinte maneira: Android:text = “Tela Principal” Depois de alterado, clique na aba Design e veja o que acontece. O resultado deve ser como o apresentado na imagem a seguir. Imagem 3.30 – Apresentação do layout do app Fonte: Elaborada pela autoria (2023). Perceba também que o conteúdo do atributo “text”, destacado em vermelho, do lado direito da imagem anterior também foi alterado. Agora faça outro teste: altere o conteúdo da caixa de texto (destacada em vermelho) para “Tela Principal do App” e pressione a tecla ENTER. Esse ato terá duas consequências: (1) o conteúdo 52 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 do elemento TextView, destacado em vermelho, no lado esquerdo da imagem 3.30, que está posicionado no meio da tela do AVD, será alterado. Clicando na aba Text, você perceberá que o arquivo xml também foi alterado na linha 12, conforme apresentado na imagem a seguir. Imagem 3.31 – Elemento TextView Fonte: Elaborada pela autoria (2023). A conclusão é óbvia, mas precisa ser mencionada aqui: qualquer alteração no arquivo xml causa alterações no layout do app ou em algum atributo de um dos componentes de sua tela. Além disso, qualquer alteração no layout do app ou em qualquer atributo dos elementos que compõem sua tela causa alterações no arquivo xml. Portanto, você deve ter percebido que o editor de layout do Android Studio pode fazer muito mais do que apresentamos até agora. Não se preocupe. Vamos passo a passo, aprofundando- nos no decorrer de nossos estudos. Uma vez que você já conheça um pouco do editor de layout e de sua relação com o arquivo xml, vamos em frente para entender como inserir componentes na tela do app. 53PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Primeiro, precisamos mudar o layout da tela. Se olharmos com atenção para a linha 2 da imagem 3.29, perceberemos que o layout definido até o momento para nosso app é o ConstraintLayout. Vamos, então, mudar essa especificação para um tipo de layout mais simples e de mais fácil entendimento: LinearLayout. Para isso, clique na aba Design e verifique a janela chamada “Componente Tree” ou, em português, “Árvore de Componentes”. Ela deve mostrar todos os componentes ou elementos que estão presentes na tela de seu app até o momento, da seguinte maneira: Imagem 3.32 – Árvore de componentes do app Fonte: Elaborada pela autoria (2023). Clique com o botão direito do mouse sobre o referido layout e selecione o item “Convert View...”; uma tela com os layouts disponíveis será apresentada. Nessa nova tela, selecione “LinearLayout” e clique no botão “Apply”, como apresentado na imagem a seguir. 54 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Imagem 3.33 – Alterando o layout da tela do app Fonte: Elaborada pela autoria (2023). A janela que apresenta a “Árvore de Componentes” deve ser alterada para informar que o layout do app passou a ser definido como LinearLayout (horizontal). No entanto, queremos que a orientação dos componentes seja vertical; por isso, clique uma vez com o botão esquerdo do mouse sobre o referido layout e altere o atributo “orientação”, como destacado na imagem a seguir. 55PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Imagem 3.34 – Alterando a orientação do layout para a vertical Fonte: Elaborada pela autoria (2023). Se você clicar na aba Text, verá o seguinte código xml: Imagem 3.35 – Arquivo xml da tela do app depois de ter o layout definido para LinearLayout Fonte: Elaborada pela autoria (2023). 56 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 IMPORTANTE Os tipos de layout e suas características serão vistos mais adiante neste material. Por ora, estamos apenas introduzindo o assunto. Perceba a diferença entre o arquivo da imagem 3.35 e o arquivo xml da imagem 3.34. Agora que o layout da tela está devidamente configurado, precisamos aprender a inserir componentes em nosso app. TextView O componente TextView é um rótulo ou uma etiqueta (label) em que podemos escrever um texto que pode ser lido, mas não pode ser alterado pelo usuário do app. Neste segmento, vamos primeiramente deletar o componente Textview que já existe (apenas para praticar) e adicionar um novo. Assim, para deletar o componente TextView (ou qualquer outro que você deseje), clique na aba Design para visualizar o editor de layout do AVD. Em seguida, clique sobre o componente TextView, cujo texto é “Tela principal do App” e pressione a tecla “delete” em seu teclado. Para inserir o novo componente TextView, selecione, na janela “Palette” (que fica acima da janela “Component Tree”), o componente Text -> TextView, conforme destacado na imagema seguir. 57PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Imagem 3.36 – Janela “Palette” Fonte: Elaborada pela autoria (2023). Agora clique e arraste o componente para a tela do AVD. Note que, ao soltar o componente sobre a tela do AVD, ele se adequa ao tamanho da tela e fica posicionado na parte superior dela, como mostra a imagem a seguir. 58 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Imagem 3.37 – TextView inserido na tela do AVD Fonte: Elaborada pela autoria (2023). Repare que, se você clicar sobre o componente TextView inserido, aparecerá, do lado direito da tela, uma janela com as propriedades (atributos) desse componente. Podemos perceber claramente que o componente possui um identificador único, chamado ID, cujo valor é TextView2. Ele possui também duas propriedades parecidas, chamadas de layout_width e layout_ height, as quais definem suas propriedades de largura e altura respectivamente. Para cada uma dessas propriedades, podemos ter três valores diferentes, a saber: (1) Match_parent: define que o objeto deve ter a mesma largura (width) e/ou altura (height) do componente no qual ele está contido. Para esse caso em específico, sabemos que o componente TextView está contido no componente LinearLayout. Assim, podemos provar isso ao analisar a janela “Component Tree”, que destaca claramente essa característica. 59PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 (2) Outro valor possível é wrap content. Se esse valor for escolhido para essa propriedade, a largura (width) e/ou a altura (height) do componente TextView serão ajustadas ao tamanho do texto que ele possui. É importante destacarmos que, se o componente não tiver valor para a propriedade de texto, isto é, se a propriedade “text” estiver vazia, o componente ficará invisível. (3) Podemos clicar nos três pontos “...” que estão à direita da caixa de combinação e selecionar um dos itens apresentados em uma tela especial. Logo depois dessas propriedades, existe uma propriedade chamada “text”, que define o texto a ser apresentado pelo componente “TextView” na tela do AVD. Assim, defina para essa propriedade o seguinte valor: “Bem-vindo ao meu app. Digite seu nome e clique em OK para entrar”. Em seguida, pressione ENTER. O texto que você acabou de digitar aparecerá em uma única linha no AVD, mas você pode clicar sobre o componente e alterar a largura ou a altura dele, para ficar parecido com a imagem a seguir. Imagem 3.38 – Componente “TextView” no editor de layout Fonte: Elaborada pela autoria (2023). 60 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Salve e execute o aplicativo. O resultado deve ser como o apresentado na imagem a seguir. Imagem 3.39 – Componente “TextView” com o aplicativo em execução Fonte: Elaborada pela autoria (2023). Note que você pode alterar outras propriedades do componente “TextView”, tais como tipo, cor e tamanho da fonte, entre outras, como mostra a imagem a seguir. 61PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Imagem 3.40 – Propriedades do componente “TextView” Fonte: Elaborada pela autoria (2023). A frase que aparece no componente “TextView” nos dá uma deixa para aprendermos a inserir dois novos componentes: o “Plain Text” e o “Button”. Então, vamos lá! 62 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Plain Text O “Plain Text” é uma caixa de texto que permite ao usuário digitar algo. Ele tem os mesmos atributos que o componente “TextView” e mais um, chamado de “Input Type”, o qual define o tipo de dado que esse componente vai receber. Nesse sentido, podemos definir o conteúdo da propriedade “text” como vazio, afinal o usuário vai digitar o seu nome ali. Para incluir esse componente, siga o mesmo método que usou para inserir o componente “TextView”. Salve e execute o app. A tela do AVD deve ficar assim: Imagem 3.41 – AVD com “TextView” e “Plain Text” Fonte: Elaborada pela autoria (2023). Aqui podemos notar algumas características. O atributo android:text (no arquivo xml correspondente) foi definido como “” (vazio). Isso faz sentido, pois o objetivo desse componente é receber um texto, e não o apresentar. Você pode alterar essa propriedade para dar uma dica ao usuário, caso queira. Além disso, esse componente, chamado android:inputtype, é responsável por definir o tipo de dado que receberá. Ele pode conter valores como 63PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 text, date, time, datetime, numberDecimal, number, textPassword, entre outros. Você também pode alterar outras propriedades, conforme apresentamos na imagem a seguir. Imagem 3.42 – Propriedades do componente “PlainText” Fonte: Elaborada pela autoria (2023). Button Agora precisamos inserir um botão com o texto “OK”. Para isso, selecione o item Button -> Button, na janela “Palette”, como apresentado na imagem a seguir. 64 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Imagem 3.43 – Inserindo um botão Fonte: Elaborada pela autoria (2023). Insira o botão na tela, altere seu tamanho e troque o valor de sua propriedade “text” de “Button” para “OK”. Ao ser salvo e executado, o app deve ficar mais ou menos assim: Imagem 3.44 – AVD com “TextView”, “Plain Text” e “Button” Fonte: Elaborada pela autoria (2023). Antes de passarmos para o próximo componente, clique na aba “Text” e verifique o arquivo xml correspondente a essa Activity que acabamos de fazer. Ela deve estar parecida com a imagem a seguir. 65PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Imagem 3.45 – Arquivo xml correspondente ao AVD da imagem 3.42 Fonte: Elaborada pela autoria (2023). Repare como os componentes estão descritos no código xml: o layout e cada um dos componentes. Radio Button Existem muitas opções de componentes, como você pode reparar na janela “Palette”, apresentada na imagem a seguir. 66 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Imagem 3.46 – Janela “Palette” Fonte: Elaborada pela autoria (2023). Antes de inserirmos mais componentes, como o “Radio Button”, vamos criar outra Activity (tela) para o nosso app. Essa Activity deve ser chamada de “Tela2” e deve ser uma Empty Activity. Depois de criar a nova Activity, não se esqueça de mudar o layout para LinearLayout (vertical), assim como fizemos com a Activity principal. Isso posto e realizado, podemos inserir o “radio button”. Para tanto, selecione o item “Buttons” e perceba que existem dois componentes que começam com o nome Radio: “RadioGroup” e 67PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 “RadioButton”. Primeiro, selecione o “RadioGroup” e o arraste para a tela do AVD. Depois, selecione três componentes “RadioButton” e os arraste para o interior do “RadioGroup” que você acabou de inserir. Seu projeto deve ficar como mostra a imagem a seguir. Imagem 3.47 – Inserindo “Radio Buttons” na Activity Fonte: Elaborada pela autoria (2023). Para melhorar o layout dessa Activity, selecione o componente “RadioGroup”, defina ambos os valores das propriedades “layout_width” e “layout_height” para “wrap_content”. Sua tela deve ficar assim: 68 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Imagem 3.48 – Melhorando o layout da imagem 3.44 Fonte: Elaborada pela autoria (2023). Repare que todos os componentes “RadioButtons” tem o mesmo valor para a propriedade “text”. Clique no primeiro e defina essa propriedade para “Aluno”. Defina também, para o segundo, o valor “Professor” e, para o terceiro, o valor “Outro”. Sua tela deve ficar assim: Imagem 3.49 – Projetando a Activity 2 do app Fonte: Elaborada pela autoria (2023). Vamos inserir agora um “TextView” com o seguinte texto: “Qual é sua posição nesta instituição?”. 69PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Podemos imaginar que esse app seja direcionado a uma instituição de ensino. Clique e arraste o componente “TextView” de maneira que ele fique acima do “RadioGroup”. A tela deve ficar assim: Imagem 3.50 – Projetando a Activity 2 do app Fonte: Elaborada pela autoria (2023). Não se esqueça de que você pode alterar outras propriedades,tais como espaçamento, cor, tipo e tamanho de fonte, entre outras, em todos os componentes. Check Box e Combo Box Para inserir esses componentes, use os mesmos recursos aprendidos até o momento. Sua tela deve ficar como a apresentada na imagem a seguir. 70 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Imagem 3.51 – Projetando a Activity 2 do app Fonte: Elaborada pela autoria (2023). Bom, você já deve ter percebido a quantidade de componentes que pode utilizar para montar um app. Então, monte um aplicativo ao seu estilo! Alterando as propriedades de cada componente, você pode criar um app mais amigável e legível. Use sua imaginação! 71PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Imagem 3.52 – Alterando propriedades de cada elemento da tela Fonte: Elaborada pela autoria (2023). No caso do elemento “ComboBox”, ele está definido como Container -> Spinner na janela “Palette”, como mostrado na imagem a seguir. Imagem 3.53 – Componente “ComboBox” Fonte: Elaborada pela autoria (2023). 72 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Outro aspecto importante é que, para definir seu conteúdo, é necessário criar um array de opções no arquivo strings.xml, dentro da pasta “values”. Sua localização é apresentada na imagem a seguir. Imagem 3.54 – Localização do arquivo string.xml Fonte: Elaborada pela autoria (2023). Nesse caso, precisamos inserir um array com os valores “masculino” e “feminino” dentro desse arquivo. Para tanto, clique sobre o arquivo e digite o código apresentado na imagem a seguir. Imagem 3.55 – Arquivo string.xml Fonte: Elaborada pela autoria (2023). 73PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 O que você precisa digitar está destacado em vermelho na imagem. Já aquilo que está em azul é outro exemplo para você perceber como o processo segue o mesmo padrão. Uma vez que você tenha digitado o código do arquivo xml, conforme apresentado na imagem anterior, volte para o editor de layout da tela 2, clique no componente “Combobox” (spinner) e verifique suas propriedades. Uma delas será a “entries”. Clique no botão ao lado dessa propriedade, e você verá mais ou menos o que mostra a imagem a seguir. Imagem 3.56 – Criando valores para o componente “ComboBox” Fonte: Elaborada pela autoria (2023). Em destaque, na imagem anterior, podemos verificar que, ao clicarmos no link da propriedade “entries”, a tela “Resources” é apresentada. Do lado esquerdo, selecione a opção “Array”, destacada em azul, e você terá acesso a todos os arrays definidos no arquivo string.xml, entre os quais estão o array que trata de “estado civil” e o que trata de “sexo”. Clique duas vezes sobre o array que fornece as opções de “sexo”, e a tela será fechada. Finalmente, para testar se tudo está funcionando, salve seu projeto e execute-o. Note que apenas a primeira tela (Principal) aparece e que aparentemente não temos como acessar a tela 74 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 2 para verificar os demais componentes. Nesse caso, existem duas soluções possíveis: você pode fazer o mesmo processo que fizemos no capítulo 2 desta unidade ou você pode fazer a seguinte alteração: 1. Abra o arquivo AndroidManifest.xml. Ele deve se parecer como o apresentado a seguir. Imagem 3.57 – Arquivo AndroidManifest.xml Fonte: Elaborada pela autoria (2023). Note que, destacados em vermelho, estão os comandos que permitem ao Android Studio saber qual das telas deve ser a primeira a ser aberta quando o aplicativo for executado. 2. Faça uma alteração nesse código para que o que estudamos na primeira unidade desta disciplina passe da tela Principal para a Tela 2, da seguinte maneira: 75PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Imagem 3.58 – Alterando a tela inicial do aplicativo Fonte: Elaborada pela autoria (2023). Salve o arquivo e execute a aplicação. Você verá que a Tela 2 é apresentada e deve se parecer com a imagem a seguir. Imagem 3.59 – Tela 2 da aplicação Fonte: Elaborada pela autoria (2023). 76 PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 Bem, certamente já vimos muita coisa. Não se esqueça de testar, criar, inventar, modificar as propriedades e verificar seus efeitos. Na próxima unidade, veremos como tratar os eventos gerados pelos componentes vistos aqui. Não se esqueça de se aprofundar nos conhecimentos, acessando as referências apresentadas. RESUMINDO E então? Gostou do que lhe mostramos? Aprendeu mesmo tudinho? Agora, só para termos certeza de que você realmente entendeu o tema de estudo deste capítulo, vamos resumir o que vimos. Você deve ter aprendido como inserir componentes na tela. Esperamos que tenha aproveitado ao máximo todo o conteúdo apresentado. 77PROGRAMAÇÃO CODING (MOBILE) U ni da de 3 CLARO, D.; SOBRAL, J. Programação em JAVA. Florianópolis: Copyleft Pearson Education, 2008. 89 p. Disponível em: https:// www.faeterj-rio.edu.br/downloads/bbv/0031.pdf. Acesso em: 8 dez. 2023. CORDEIRO, F. Android Studio. 3. ed. [S. l.]: AndroidPro, 2016. CORDEIRO, F. Android aprendiz. [S. l.]: AndroidPro, 2017. 37 p. Disponível em: https://www.androidpro.com.br/. E-book. Acesso em: 8 dez. 2023. DALL’OGLIO, P. PHP: programando com orientação a objetos. 3. ed. SP: Novatec Editora, 2016. DEITEL, H. M.; DEITEI, P. J. Java: como programar. 4. ed. Porto Alegre: Bookman, 2003. GOSLING, J.; MCGILTON, H. The Java language environment. Mountain View: Sun Microsystems, Inc, 1995. MATTOS, E. Programação de software em Java. São Paulo: Digerati Books, 2007. MEIRELLES, A. Smartphones, guia prático - android. Hardware.com. br, 2009. ORACLE.COM. Java Documentation. [S. l.]: Oracle, 2018. SINGH, C. @Override annotation. In: Java. Java Tutorial, 2017. RE FE RÊ N CI A S _Hlk156296831 _Hlk156296744 _Hlk156296522 _Hlk156296664 _Hlk156296551 _Hlk156296213 _Hlk156296239 _Hlk156296263 _Hlk156296425 _Hlk156296281 Ciclo de vida do aplicativo Android e classe Activity Introdução Gerenciando aplicativos Ciclo de vida do aplicativo Android A classe Activity Navegabilidade Introdução Chamando a segunda Activity Intenção de chamada Evento de chamada Passagem de parâmetros entre telas Entendendo a passagem de parâmetros entre as telas Inserindo componentes na tela Entendendo o leitor de layout TextView Plain Text Button Radio Button Check Box e Combo Box