terça-feira, 12 de novembro de 2013

Aula 06 - Começando a Desenhar sua Tela de Interface

Aula 06 - Começando a Desenhar sua Tela de Interface


Para realizar o desenvolvimento de sua Tela de Interface é fundamental a compreensão dos dois tipos de layout disponíveis no Android, o LinearLayout e o RelativeLayout.

Neste post falaremos sobre o LinearLayout e no post seguinte explicaremos o RelativeLayout.

Mas o que é um Layout ?

O Layout é basicamente a forma como você organiza os componentes na tela do dispositivo.

LinearLayout :

Neste método de organização os componentes (ou controles) são posicionados na tela na ordem em que são declarados, podendo esta sequência ocorrer com orientação horizontal ou vertical.

LinearLayout Horizontal :

Em uma organização horizontal, todos os componentes declarados serão posicionados um ao lado do outro. Se você declarar 3 botões em um layout horizontal, todos estarão dispostos um ao lado do outro, conforme figura abaixo:






A montagem do Layout pode ser feita de duas formas, a primeira é a montagem através de um arquivo .xml e a segunda é utilizando-se alguma ferramenta de desenho de Interfaces, como por exemplo a visão "Graphical Layout" disponível na IDE Eclipse.

Na figura acima temos um screen shot da tela construída no Eclipse. Mas utilizar diretamente a edição do arquivo .xml também pode ser uma boa forma de construir sua tela de interface.

Veja abaixo o arquivo .xml referente a tela da figura acima:


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />
   
</LinearLayout>




LinearLayout Vertical:


Analogamente ao LinearLayout Horizontal, o Layout vertical posicionará os componentes um embaixo do outro, conforme a seguir:


Observe que pouca coisa mudará no arquivo .xml referente ao novo exemplo de layout:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</LinearLayout>



Quando adicionamos a linha destacada acima no arquivo .xml, o layout se transforma em layout vertical, conforme observado.


Aplicando o conceito de Layout aprendido para construirmos um rápido exemplo no Eclipse:

- Abra o Eclipse
- Clique em File >> New >> Project
- Expanda a opção Android clicando no + que fica ao lado da referida opção
- Selecione Android Application Project e clique em Next.
- No campo Application Name digite EntendendoLayouts que é o nome que daremos a esta aplicação de exemplo.
- No campo Minimum Required SDK escolha 2.2
- Em target API, escolha API 18
- No campo Compile With, escolha API 19
- Clique em Next.
- Selecione a opção: Create Custom Launcher Icon
- Selecione também: Create Activity
- E finalmente selecione a opção Create Project in Workspace
- Clique em Next.
- Clique em Next
- Selecione a opção Blank Activity e Clique em Next.
- Na próxima tela clique em Finish.







O Eclipse criará uma aplicação básica, conforme vimos nos Posts anteriores. Vamos prosseguir aplicando o conceito aprendido sobre LinearLayout

Conforme explicado no Post anterior, as telas de Interface são posicionadas na estrutura de pastas dentro da pasta "res/layouts" , localize o arquivo .xml dentro desta pasta, conforme figura abaixo:




Efetue um duplo clique sobre o arquivo .xml e você verá a estrutura criada inicialmente pelo Eclipse, selecione o texto e apague, pois vamos inserir um novo layout.

Basicamente o que vamos fazer é utilizar o .xml de LinearLayout vertical já mostrado anteriormente e adicionarmos algumas poucas linhas apenas para permitir a adição de funcionalidades a esta aplicação que estamos criando. Faremos os botões funcionar apenas para não deixar a aplicação estática.

Copie o código abaixo, onde as linhas marcadas em amarelo foram adicionadas:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="OnButton1"
        android:text="Button" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="OnButton2"
        android:text="Button" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="OnButton3"
        android:text="Button" />

</LinearLayout>



As linhas acima foram adicionadas para informar ao android quais rotinas deverão ser chamadas quando um botão for acionado. Para finalizarmos, vamos alterar o programa principal para implementar estas rotinas.

Para isto, abra o arquivo src/MainActivity.java efetuando um duplo clique sobre o mesmo no Package Explorer :

O código original deve ter sido criado semelhante ao código abaixo:

package com.example.entendendolayouts;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}


Faça a modificação adicionando o seguinte trecho abaixo:


package com.example.entendendolayouts;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

import android.view.View;            // Para declaracao dos eventos dos botoes
import android.app.AlertDialog;        // Para exibicao do message box


public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

       
    public void OnButton1(View v ) {
        ShowMsgBox("O Botao 1 foi pressionado.");
    }

    public void OnButton2(View v) {
        ShowMsgBox("O Botao 2 foi pressionado.");
    }
   
    public void OnButton3(View v) {
        ShowMsgBox("O Botao 3 foi pressionado.");
    }
   
    private void ShowMsgBox(String text) {
        AlertDialog.Builder dialogo = new AlertDialog.Builder(this);
        dialogo.setTitle("Aviso");
        dialogo.setMessage(text);
        dialogo.setNeutralButton("OK", null);
        dialogo.show();       
    }
   
}



Executando a aplicação você poderá pressionar cada um dos 3 botões disponíveis na tela de interface da aplicação.



No próximo post explicaremos o RelativeLayout.







Aula 05 - Explicação sobre a estrutura de Pastas de um projeto para Android

Aula 05 - Explicação sobre a estrutura de Pastas de um projeto para Android

Até agora os títulos dos nossos Posts estavam sendo referenciados como "Passos" para que você chegasse até a construção de uma primeira aplicação.

A partir de agora os títulos serão referenciados como Aulas, que iniciam neste post como Aula 05 e assim em diante.

Para compreender melhor a estrutura de pastas utilizadas em um projeto Android, explicaremos cada uma delas:


Estrutura de Pastas:

assets - Esta pasta não contem arquivos por padrão. Esta pasta é utilizada para armazenar arquivos utilizados pela aplicação. Um arquivo da pasta assets poderá ser um dos muitos arquivos que você pode precisar para o funcionamento da aplicação. Um exemplo de arquivo a ser posicionado nesta pasta seria um arquivo texto utilizado pelo seu projeto.

bin - Pasta que conterá o pacote final gerado para instalação. Aqui estarão armazenados o .apk, arquivos .class, arquivos de recursos e arquivos intermediários gerados pelo compilador.

gen - Esta pasta contem arquivos java gerados pelo ADT. Estes arquivos contem referências a vários recursos da aplicação (Incluindo a estrutura referenciada 'R.' que é utilizada no código para referenciar recursos)

libs - Esta pasta contem bibliotecas externas referenciadas no projeto.

res - Esta pasta contem todos os recursos como imagens, layouts e arquivos xml que são usados pelo seu código e no momento da compilação. Diversos tipos de arquivos de recurso são suportados pelo Android, como por exemplo arquivos .XML, .JPG e .PNG. Abaixo o detalhamento da organização da pasta res/.

    res/layout/ - Contem arquivos de Layout
    res/drawable/ - Contem arquivos de imagens
    res/values/ - Contem arquivos de valores (Um exemplo é o recurso de armazenamento de strings)

src - Contem o código java escrito pelo programador (Incluindo o arquivo MainActivity.java).

O arquivo AndroidManifest.xml é necessário para toda aplicaçao Android. Ele fica localizado na pasta raiz do projeto e descreve os principais parâmetros para seu pacote (incluindo activities, services, IntentFilters, etc)