1.4 Conheça a estrutura do projeto
Já temos a primeira versão do nosso Hello World. É bem verdade que ainda não fizemos nenhuma codificação, então vamos analisar a estrutura do projeto e tudo aquilo que foi gerado automaticamente para que essa mágica acontecesse. Na figura 1.20, podemos identificar cinco pastas principais ( src, gen, assets, bin, libs e res) além de uma referência para a biblioteca Android que está sendo utilizada:
-
src - pasta dedicada ao armazenamentos dos códigos-fonte do projeto e será onde colocaremos as classes Java que criaremos em nossa aplicação. Repare que já existe uma MainActivity.java que foi criada automaticamente quando criamos o projeto;
-
res - dedicado ao armazenamento de recursos (arquivos de layout, imagens, animações e xml contendo valores como strings, arrays etc.), acessíveis através da classe R;
-
assets - diretório para o armazenamento de arquivos diversos utilizados por sua aplicação. Diferentemente dos recursos armazenados na pasta res, estes são acessíveis apenas programaticamente;
-
gen - armazena códigos gerados automaticamente pelo plugin, como a classe R
que mantém referências para diversos tipos de recursos utilizados na aplicação;
-
libs - pasta para armazenar bibliotecas de terceiros que serão utilizadas pela aplicação;
-
bin - local utilizado pelos processos de compilação e empacotamento para manter arquivos temporários e códigos compilados.
No diretório raiz do projeto também existem alguns arquivos, sendo um deles, o AndroidManifest.xml, obrigatório para toda aplicação Android. Esse arquivo contém informações essenciais sobre a sua aplicação e sobre o que é necessário para executá-la, incluindo a versão mínima do Android. O nome do pacote escolhido durante a criação do projeto, por exemplo, é armazenado lá para servir como identificador único da sua aplicação.
O manifesto também descreve os componentes (activities, services, content providers e broadcast receivers) que fazem parte da aplicação, possibilitando que o sistema operacional Android seja capaz de identificá-los e determinar quando serão executados. Durante o livro, vamos aprender como trabalhar com esses diferentes componentes. No código a seguir, a activity MainActivity é quem representa o componente que é iniciado quando executamos a aplicação.
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="br.com.casadocodigo.helloandroid" android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" />
<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >
<activity android:name=".MainActivity" android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>As activities são componentes da plataforma Android, capazes de apresentar uma tela para interagir com os usuários. Através delas podemos tirar uma foto, enviar um email, visualizar uma imagem e navegar na Internet. Geralmente uma aplicação é composta por várias activities, sendo uma delas a activity principal que é executada quando a iniciamos. O código a seguir demonstra a atividade principal ( MainActivity.java) do nosso projeto HelloWorld que foi criada automaticamente pelo ADT plugin:
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}Para criar uma atividade, basta fazer com que nossa classe estenda a classe Activity do Android, como pode ser visto na linha 1. Já na linha 6, passamos para o método setContentView o identificador do layout, R.layout.activity_main, que deve ser carregado para construir a interface gráfica da nossa Activity. É bastante comum e também recomendado que as informações referentes a layouts e interfaces gráficas estejam externalizadas em arquivos
XML, separados do código da aplicação. Essas e outras boas práticas nós aprenderemos no decorrer do livro.
Vamos prosseguir verificando o arquivo activity_main.xml, que se encontra no diretório res/layout/ do projeto.
<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" >
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:padding="@dimen/padding_medium"
android:text="@string/hello_world"
tools:context=".MainActivity" />
</RelativeLayout>Recursos gráficos do ADT
Quando abrimos um arquivo de layout no Eclipse com o ADT instalado, ele é apresentado em um visualizador de layouts (aba Graphical Layout), no qual é possível verificar como o layout está ficando além de contar com opções para configurar diversos atributos. Também é possível utilizar esse recurso para adicionar elementos de layout e de entrada de dados. Para ver o XML resultante selecione a outra aba que possui o nome do arquivo. Para conhecer mais sobre os recursos disponíveis no ADT visite http://developer.android.com/tools/help/adt.html.
Neste arquivo de definição de layout temos dois elementos declarados, o RelativeLayout e o TextView, com seus respectivos atributos. Como o nome sugere, o RelativeLayout (linha 1) é um elemento para organização do layout da tela, permitindo configurar a sua altura e largura.
Já o TextView é um widget utilizado para apresentar na tela uma informação textual. O valor a ser exibido por este elemento está especificado através do atributo text. Repare que na linha 13 o valor que TextView deve exibir é @string/hello_world. Aqui temos novamente um caso no qual a externalização é recomendada principalmente para facilitar a internacionalização da aplicação, suportando vários idiomas diferentes e para até mesmo reaproveitar mensagens.
O valor que será utilizado no TextView será na verdade o conteúdo da string que possui o identificador hello_world. No arquivo res/values/strings.xml é possível observar como isso foi definido:
<resources>
<string name="app_name">HelloAndroid</string>
<string name="hello_world">Hello world!</string>
<string name="menu_settings">Settings</string>
<string name="title_activity_main">MainActivity</string>
</resources>Na linha 3, declaramos uma string com o nome hello_world cujo valor é “Hello World!“. Por convenção, o arquivo strings.xml é onde definimos recursos do tipo string, ou seja, textos que queremos exibir de alguma maneira em nossa aplicação. Para finalizar, altere o valor da string hello_world para “Hello Android!” e execute a aplicação novamente. O resultado desta alteração pode ser visto na imagem 1.21
Dica: Acessando o AVD Manager e SDK Manager pelo Eclipse
Após a instalação e configuração do ADT, através do menu Window é possível fazer um acesso rápido ao AVD Manager e SDK Manager para baixar novas versões do Android e também criar novos dispositivos virtuais!