Aprenda a programar para Android – Parte IV
Por Christian Göllner para o PPLWARE.COM
Depois de termos aprendido a instalar e configurar o SDK (ver aqui) desenvolvemos o layout de uma aplicação tipo calculadora (ver aqui). Na parte 3 demos vida à calculadora ( ver aqui).
Até agora temos trabalhado numa app que mostra uma activity, i.e. um único ecrã. Hoje vamos aprender a iniciar um segundo ecrã quando o utilizador seleccionar um botão.
Passo 1 - Vamos abrir o eclipse e seleccionar um workspace qualquer. Passo 2 - Criar um novo projecto Android com um nome à escolha. Passo 3 - Abrimos o único ficheiro .xml que está na pasta res/layout e substituímos tudo pelo seguinte código:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <EditText android:id="@+id/editTextMensagem" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_toLeftOf="@+id/botaoEnviar" android:layout_marginTop="16dp" android:ems="10" /> <Button android:id="@+id/botaoEnviar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/editTextMensagem" android:layout_alignBottom="@+id/editTextMensagem" android:layout_alignParentRight="true" android:text="Enviar" android:onClick="enviarMensagem" /> </RelativeLayout> |
O atributo android:onClick serve para dizer que sempre que este botão for seleccionado, vai ser chamado um método chamado enviarMensagem dentro da activity que está a utilizar este layout.
Passo 4 - Vamos abrir o único ficheiro .java presente no nosso projeto e adicionar o tal método enviarMensagem.
/** Chamado quando o utilizador seleccionar o botão de enviar **/ public void enviarMensagem(View view) { } |
Vai aparecer uma mensagem de erro no eclipse porque ainda não importámos a classe View.
Podemos utilizar o atalho Ctrl + Shift + O para importar as classes em falta (Cmd + Shift + O no Mac).
É importante referir que para o sistema detetar correctamente este método, o nome do método tem de coincidir com o nome atribuido no ficheiro xml e ainda tem que:
- Ter visibilidade public
- Ter como tipo de retorno void
- Ter como único parâmetro um View
Passo 5 - Criar um Intent.
Um Intent(Intenção) é um objecto que permite ligar componentes em runtime. Representa a intenção da aplicação fazer algo. Pode-se utilizar um Intent para muitas coisas, como por exemplo partilhar conteúdo, ir buscar conteúdo ou iniciar outras Activities. Nós vamos querer utilizá-lo para iniciar uma Activity.
Dentro do método enviarMensagem() vamos então criar um Intent para iniciar uma activity chamada MostrarMensagemActivity (que vamos criar a seguir):
/** Chamado quando o utilizador seleccionar o botão de enviar*/ public void enviarMensagem(View view) { Intent intent = new Intent(this, MostrarMensagemActivity.class); } |
O construtor da classe Intent utilizado aqui recebe dois parâmetros:
- Um Context como primeiro parâmetro. Neste caso passamos this, que é uma referência para a instância da nossa classe actual. Este parâmetro é necessário para a segunda Activity saber quem a criou e depois quando ela terminar saber para onde regressar.
- A Class do componente ao qual o sistema tem que entregar oIntent.
Um Intent para além de permitir iniciar uma Activity, também permite transportar dados de uma Activity para outra. Nós vamos utilizar essa funcionalidade para transportar a mensagem inserida na caixa de texto.
/** Chamado quando o utilizador seleccionar o botão de enviar */ public void enviarMensagem(View view) { Intent intent = new Intent(this, MostrarMensagemActivity.class); EditText editText = (EditText) findViewById(R.id.editTextMensagem); String mensagem = editText.getText().toString(); intent.putExtra(“EXTRA_MENSAGEM”, mensagem); startActivity(intent); } |
Para transportar dados num Intent usam-se entradas de pares chave-valor. No nosso caso a String “EXTRA_MENSAGEM” é a chave e a String mensagem é o valor.
Passo 6 - Criar a segunda Activity.
No nosso projecto vamos criar uma classe nova chamada MostrarMensagemActivity que extende a classe Activity.
public class MostrarMensagemActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } } |
Agora vamos ter de declarar esta Activity no ficheiro AndroidManifest.xml para poder ser executada. <application ... > <activity android:name=".MostrarMensagemActivity" /> ... </application>
Passo 7 - Receber o Intent e mostrar a mensagem.
public class MostrarMensagemActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Obter a mensagem do Intent Intent intent = getIntent(); String mensagem = intent.getStringExtra(“EXTRA_MENSAGEM”); // Criar um TextView TextView textView = new TextView(this); textView.setTextSize(40); textView.setText(mensagem); setContentView(textView); } } |
A partir de agora já se pode correr a app, escrever uma mensagem, pressionar “Enviar” e ver a mensagem a aparecer na segunda Activity.
Nota: Este tutorial foi adaptado a partir de um tutorial do Android Training.
Download: Link para o apk
Este artigo tem mais de um ano
Boas Francisco Franco, uma vez que estou a entrar no mundo das aplicações móveis, todos os exemplos e ajudas são bem vindas.
Vou acompanhar os os teus tópicos sobre android com atenção!
Cumprimentos,
Fernando Silva
Boas Fernando,
só para esclarecer, fui eu que escrevi o artigo. O Francisco apenas o publicou por mim.
Cumprimentos,
Christian
Então obrigado aos dois!!!
A quem escreveu e a quem publicou.
😉
Cumprimentos,
Fernando Silva
Parabens Christian Göllner pelo artigo.
Como fazes um layout idêntico ao “ASP Surfing News” aqueles estilos menus etc…
Se me poderes orientar…
Abraço
Obrigado Tiago!
É um bocado complicado explicar por aqui.
A página principal é um LinearLayout vertical.
Cada menu é um TextView que ocupa a largura do ecrã. As cores de fundo dos menus foram feitos a partir de estilos que defini em ficheiros xml.
Link útil: http://developer.android.com/guide/topics/ui/themes.html
Olá Christian Göllner, não tens ai uns manuais para alguem que quer começar do nada? 😉 Sou programador web, mais propriamente programador php, não tenho nenhumas noçoes de android e java, gostava de me iniciar neste mundo.
Se alguem pode ajudar agradecia.
Obrigado
Abraços.
Olá Ivo. Tens no início do artigo links para as várias partes desta rúbrica onde podes aprender como começar do 0 a programar para Android. Claro que ajuda teres bases em Java, mas isso também encontras livros que te ajudem nesse capítulo. Se sabes PHP então Java não há de ser nenhum bicho de 7 cabeças pois já tens alguma lógica 😉
Abraço
Francisco Franco aconselhas algum livro em especifico?
Já vi um pouco de Java e achei um pouco confuso.
Abraços
Olá Ivo,
se perceberes bem Inglês, tens um “curso” da Google para ajudar as pessoas a iniciarem-se no desenvolvimento de aplicações para Android.
http://developer.android.com/training/index.html
Tem muito conteúdo de qualidade.
Abraço
Olá Christian Göllner,
Não sou nenhum pro ou expert em inglês mas safo-me bem.
Desconhecia esse link, tenho que perder algum tempo e ler isso.
Tens conhecimento de algo do género mas tuga com exemplos de código?
Abraços
eu comecei a programar para android através destes tutoriais,
https://www.youtube.com/watch?v=SUOWNXGRc6g
o gajo tem cerca de 200 tuts sobre android, explica bem, mas ajuda teres um background de linguagens OO, se estás habituado a php5 não vais ter grandes problemas….
Cumprimentos
Boas Fernando. Como disse o Christian e muito bem eu apenas o publiquei. Espero que goste deste artigo sobre programação para Android e que lhe seja útil.
Boas pessoal, e um tutorial para a aplicação interagir com uma base de dados mysql alojada num web server não haverá? Dava jeito 😛
MM,
não sei se o que estás à procura é algo nativo do Android mas este não tem nenhum componente integrado para interagir com bases de dados MySql, apenas SQLite e têm que ser bases de dados locais(acho eu).
No entanto há o famoso JDBC para o Java (Java Database Connectivity) que permite interagir com bases de dados, seja MySQL, Oracle, etc. Isso funciona em qualquer programa feito em Java, incluindo Android.
Portanto o que estarias a pedir seria mais “um tutorial para
um programa feito em Java interagir com uma base de dados mysql alojada num webserver”. Há muito por aí se pesquisares no Google mas também se pode escrever um tutorial, com certeza. 😀
É isso mesmo 😛 Pois há, mas não encontro nada completo. Uma espécie de Tutorial for Dummies xD Fico à espera da escrita então 😛
MM,
não sei se te estás a referir a algo nativo, mas o Android não tem nenhum componente integrado para interagir com bases de dados MySql, apenas com SQLite e só bases de dados locais (acho eu). No entanto há o famoso JDBC (Java Database Connectivity) que é um componente para fazer interacção de programas em Java com bases de dados MySQL, Oracle, etc. Isso funciona em qualquer programa Java, logo também funciona em Android. Portanto acho que o que estarias mais a pedir seria “um tutorial para um programa em Java interagir com uma base de dados mysql alojada num web server”, o que se pode arranjar facilmente. 😀
Não percebi o passo do Manifest. Já o abri, adicionei mas acho que não está bem pois não consigo correr o projeto. Dá-me erro. Alguma ajuda?
cumps
ERRO:
[2013-02-22 15:21:11 – SendText] No Launcher activity found!
[2013-02-22 15:21:11 – SendText] The launch will only sync the application package on the device!
Se estiveres à vontade com inglês vê os videos neste site: http://thenewboston.org/list.php?cat=6
Muito bons.
Obrigado, vou ver 😉
Ando à procura duma coisa, gostava de saber se alguém daqui me pode ajudar.
Gostava dum tutorial em vídeo completo de alguém a desenvolver uma aplicação Android para Android 4.x, algo decente, tipo um task manager, algo com um mínimo de complexidade.
É que aprender tipo “isto faz isto, isto faz aquilo”, sem objectivo, não me entusiasma nada.
Alguém sabe de alguns bons tutorials desse tipo? Algo ao estilo dos do newboston, mas para Android 4.x?
Obrigado