Desenvolvendo aplicativos para Android III
Desenvolvimento de Aplicativos Móveis
1 Trabalhando com mais de uma tela em uma aplicação
Sabemos que alguns aplicativos possuem normalmente mais de uma tela.Agora iremos ver como inserir e gerenciar várias telas em uma aplicação Android pelos exemplos que serão demonstrados nesta apostila.
Para iniciar,vamos criar um novo projeto Android com os seguintes dados abaixo:
Application Name: TrocaDeTelas
Project Name: TrocaDeTelas
Package Name : com.example.trocadetelas
Minimum Required SDK : API 14: Android 4.0 (Ice Cream Sandwich)
Activity Name: TrocaTelasActivity
Layout Name : tela_principal
Altere a estrutura de layout da sua aplicação para o LinearLayout e em seguida altere o componente TextView de acordo com a tabela abaixo.
Agora adicione um componente Button e modifique as seguintes propriedades:
Seguindo os passos acima, a aplicação deve estar de acordo com a figura abaixo:
Vejamos agora o código XML da tela da nossa aplicação:
Nossa primeira tela está pronta, muito bem! Agora vamos criar uma nova tela para a nossa aplicação. O nome do arquivo que vai representar a segunda tela da nossa aplicação vai se chamar “tela2.xml” (um arquivo XML). Conforme já foi explicado (e explico novamente aqui), todos os arquivos que representam a tela da aplicação devem estar dentro do diretório “layout” (situado dentro da pasta “res” do projeto), logo, vamos criar o nosso arquivo dentro desse diretório.
Para criarmos um novo arquivo XML dentro do diretório “layout” basta clicar com o botão direito sobre a pasta e em seguida clicar em “New” e logo após “Other”, confira na figura abaixo:
Feito isso será aberto uma tela com várias pastas, você irá expandir a pasta “Android” e em seguida vai selecionar a opção “Android Layout XML File”, conforme mostra a figura seguinte:
Após selecionar a opção acima clique em “Next” que em seguida será aberta a tela seguinte:
Por padrão a estrutura de layout padrão selecionada é LinearLayout (que será a estrutura que iremos usar). Agora no campo “File” digite “tela2” e em seguida clique em “Finish” para que o arquivo seja gerado. Veja o resultado na figura seguinte:
Por padrão quando criamos a tela da aplicação utilizando o LinearLayout, ele cria com a orientação “vertical” (essa é que vamos utilizar, portanto, não vamos mexer na estrutura).
Agora vamos adicionar os seguintes componentes, na sequência:
Seguindo os passos acima, o layout do arquivo “tela2.xml” deve estar de acordo com a figura abaixo:
Vejamos agora o código XML da tela da nossa aplicação:
Agora vamos no arquivo “TrocaTelasActivity.java” para digitarmos o código abaixo:
Observe que nesta classe criamos dois métodos:CarregaTelaPrincipal e CarregaTela2. Para toda aplicação que utilize mais de um layout (tela), o carregamento dos layouts e de seus respectivos widgets devem estar separados em funções desenvolvidas para esse propósito. Logo, o método CarregaTelaPrincipal carrega o layout principal e seus respectivos componentes, o mesmo válido para o método CarregaTela2, que carrega o layout da tela 2 e seus respectivos componentes. Feito isso, execute a aplicação. Veja o resultado abaixo:
2 Desenvolvendo uma aplicação de cadastro
Com o que já aprendemos nesta apostila e nas apostilas anteriores, já podemos criar uma aplicação mais interessante.Agora,iremos criar um cadastro de pessoas.
Nessa aplicação o usuário vai informar os seguintes dados : nome, profissão e idade.
Essa aplicação vai possuir três telas, cada uma com as seguintes funcionalidades:
Tela principal (tela com opções): Nessa tela da aplicação teremos um menu que dará acesso ao cadastro do usuário e a visualização dos usuários cadastrados.
Tela de cadastro: Nesse tela o usuário irá preencher os campos solicitados pela aplicação e em seguida o mesmo poderá cadastrar para que as informações sejam registradas.
Tela de visualização de dados: Nessa tela poderão ser visualizados os dados (usuários) cadastrados. Se nada foi cadastrado na aplicação, será exibida uma mensagem informando essa situação.
Nessa aplicação para armazenar os dados eu faço uso de uma estrutura de dados do tipo “lista” (duplamente encadeada). Nessa estrutura os dados são armazenados em sequência, e acessados tanto sequencialmente e na sua ordem inversa de cadastro (avançando e retrocedendo pelos registros)
Agora iremos construir a nossa aplicação.Crie um novo projeto com os seguintes dados abaixo:
Dentro da pasta “res/drawable-mdpi” coloque uma figura que que represente o ícone da nossa aplicação. Para esta aplicação utilizei uma imagem de extensão PNG chamada “profile.png”.
Altere a estrutura de layout da sua aplicação para o LinearLayout e em “APAGUE” o componente TextView. Feito isso adicione os seguintes componentes na sequência:
Seguindo os passos acima, a aplicação deve estar de acordo com a figura seguinte:
Vejamos agora a estutura XML da tela principal da nossa aplicação:
Agora vamos criar mais uma tela (arquivo de layout XML) para nossa aplicação. Para isso vamos clicar com o botão direito sobre a pasta “layout” e em seguida vamos chamar o recurso de criação de arquivos de layout XML para Android (o “Android XML Layout File”, conforme já foi mostrado anteriormente no último exemplo). O nome do nosso arquivo de layout XML vai ser “cadastro” (a estrutura que vamos utilizar para essa tela será o LinearLayout).
Depois de criado o arquivo vamos adicionar os seguintes componentes na sequência:
Seguindo os passos acima, a aplicação deve estar de acordo com a figura seguinte:
Agora vamos adicionar uma estrutura LinearLayout (Horizontal) que será responsável por organizar os botões de forma horizontal logo após a EditText que representa o campo “idade”. Após adicionar essa estrutura, modifique a seguintes propriedades dela, conforme abaixo:
A propriedade “Gravity” , similar a propriedade “Orientation”, determina o alinhamento dos componentes dentro da estrutura, que no caso acima está alinhando os componentes de forma centralizada, ou seja, os componentes vão estar dispostos de forma horizontal (um ao lado do outro) e todos esses componentes estarão organizados de forma centralizada.Seguindo o mesmo procedimento acima, vamos adicionar dois componentes do tipo Button dentro dessa estrutura, e vamos mudar as seguintes propriedades citadas abaixo.
Seguindo os passos acima, o Layout de nossa aplicação deve estar de acordo com a figura abaixo:
Vamos ver agora a estrutura XML da tela de cadastro da aplicação:
Agora vamos criar mais uma tela (arquivo de layout XML) para nossa aplicação. O nome da nossa tela vai se chamar “lista_pessoas_cadastradas”.
Após criar a tela da nossa aplicação, vamos adicionar os seguintes componentes na sequência:
Seguindo os passos acima, o layout da aplicação deve estar de acordo com a figura seguinte:
Agora vamos adicionar após o texto uma nova estrutura de layout do tipo LinearLayout (Horizontal), e em seguida vamos mudar as seguintes propriedades dela, conforme abaixo:
Agora dentro da estrutura “layoutNome” vamos adicionar os seguintes componentes na sequência:
Logo após a estrutura LinearLayout que chamamos de “layoutNome”, vamos adicionar uma nova estrutura LinearLayout (Horizontal), e em seguida modifique as seguintes propriedades abaixo:
Agora dentro da estrutura “layoutProfissao” vamos adicionar os seguintes componentes na sequência:
Agora vamos adicionar uma nova estrutura LinearLayout (Horizontal) e em seguida modifique as seguintes propriedades abaixo:
Agora dentro da estrutura “layoutIdade” vamos adicionar os seguintes componentes na sequência:
Agora vamos adicionar uma nova estrutura LinearLayout (Horizontal), como já foi mostrado acima. E depois, modifique as seguintes propriedades abaixo:
Agora dentro da estrutura “layoutBotoes” vamos adicionar os seguintes componentes na sequência:
Agora vamos adicionar um Button logo após a estrutura “layoutBotoes” que criamos com as seguintes propriedades abaixo:
Seguindo todos os passos acima, o layout da aplicação deve estar de acordo com a figura abaixo:
Vejamos agora a estrutura em XML da tela de listagem de pessoas cadastradas:
3 Registro
Conforme já havia falado, para esse programa vamos trabalhar com uma estrutura de dados do tipo “lista” (duplamente encadeada). Para organizarmos de uma forma mais clara o armazenamento dos dados na memória, irei criar uma classe que vai representar o “registro” das informações na memória. A classe que iremos criar vai se chamar Registro. Essa classe vai estar dentro do mesmo pacote onde se encontra o arquivo “AplicacaoCadastroActivity.java” (neste caso, o pacote “com.example.aplicacaodecadastro”). Depois de criarmos a classe, vamos escrever o seu código conforme é mostrado em seguida:
Para criamos uma classe basta clicar com o botão direito sobre o pacote citado acima e em seguida selecionar “New/Class”. Feito isso vai se abrir aquela caixa de diálogo de criação de classes e no campo “Name” vamos digitar o nome da classe que vai se chamar “Registro” (digitar sem aspas, é claro). Feito isso clique no botão “Finish” para que a classe possa ser criada. Depois de gerada a classe coloque o seguinte código como é demonstrado abaixo:
Agora no arquivo “AplicacaoCadastroActivity.java” vamos colocar o seguinte código abaixo:
Agora iremos entender aos poucos os códigos dessa aplicação.Observe que nessa aplicação ou possuo três métodos: o método CarregarTelaPrincipal (responsável por carregar a tela principal), o método CarregarTelaCadastro (responsável por carregar a tela de cadastro) e o método CarregarTelaListagemPessoas (responsável por carregar a tela de listagem dos usuários cadastrados).
Vamos analisar alguns trechos importantes de código do método CarregarTelaCadastro. Se você observar nessa aplicação, foram declarados cinco variáveis : pri,ult , reg , aux e anterior ( todas elas do tipo Registro). Irei descrever aqui a finalidade de cada variável:
A variável pri serve para apontar para o endereço do primeiro registro armazenado na memória.
A variável ult aponta para o endereço do último registro.
A variável reg armazena os dados do registro corrente, ou seja, a cada instância de um novo registro, ela irá armazenar a instância corrente.
A variável aux funciona como uma variável auxiliar, que será utilizada durante a navegação pelos registros na tela de listagem de usuários cadastrados.
A variável anterior guarda sempre o “último” registro anterior antes da criação de uma nova instância de dados, que será armazenada em reg. Isso significa que antes de reg receber uma nova instância de dados, a variável anterior irá armazenar o endereço de dados guardado atualmente por reg.
Vamos analisar a linha de comando dentro do método onClick do botão “btcadastrar”. A linha:
reg = new Registro();
Cria uma nova instância da classe Registro e guarda essa instância na variável reg. As linhas:
reg.nome = ednome.getText().toString();
reg.profissao = edprofissao.getText().toString();
reg.idade = edidade.getText().toString();
Gravam os dados dos campos no objeto reg. Já nas linhas abaixo:
if(pri == null)
pri = reg;
if(ult == null)
ult = reg;
else {
ult.prox = reg;
ult = reg;
ult.ant = anterior;
}
Fazem todo o processo de armazenamento dos dados.
Agora vamos para o método CarregarTelaListagemPessoas. Quando esse método é chamado, é feita uma verificação se há dados cadastrados, se não houver dados cadastrados será exibida uma mensagem indicando essa situação e você será retornado a tela principal. Vou comentar algumas linhas desse método. A instrução:
aux=pri;
Retorna para a variável aux o endereço do primeiro registro, que está armazenado em pri . Já as linhas:
txtnome.setText(aux.nome);
txtidade.setText(aux.idade);
txtprofissao.setText(aux.profissao);
Joga as informações obtidas (nome, idade e profissão) para os campos (todos do tipo TextView), para que elas possam ser exibidas.
Vamos agora para o método onClick do botão “btvoltar”. Esse botão mostra os registros anteriores. Antes de voltar um registro, verifico se eu me encontro no primeiro registro pela condição:
if(pos==1)
Se a condição for verdadeira, saio do evento, senão, continuo executando as instruções. A linha:
aux=aux.ant;
Retorna para aux o endereço do registro anterior. Depois disso são executados instruções para que os dados possam ser exibidos.Já no método onClick do botão btavancar, antes de passar para o próximo registro, verifico se já está no último registro pela instrução:
if(pos==numero_registros)
Se a condição for verdadeira , o evento é encerrado, senão, continuo executando as instruções. A linha:
aux=aux.prox;
Retorna para aux o endereço do próximo registro. Depois disso são executados instruções para que os dados possam ser exibidos.
Bom, vamos executar a nossa aplicação ? O resultado você confere nas figuras seguintes:
4 Propriedades e eventos dos componentes trabalhados
Agora iremos mostrar e descrever as propriedades e os eventos de todos os componentes que visualizamos nas apostilas.
Widget TextView
Widget EditText
Propriedades
Eventos
Widget Button
Propriedades
Eventos
Eventos
Widget Spinner / ListView
Propriedades
Eventos
Widget ImageView
- Propriedades