Avançar para o conteúdo principal

Android - para tudo há uma primeira vez

Depois de termos visto como criar um projeto em Eclipse para a plataforma Android vamos agora criar um pequeno programa que permite demonstrar o modo como se pode implementar uma interface com vários "ecrãs", os denominados formulários da plataforma .NET.

Para tal vamos criar um pequeno programa que lê do utilizador três notas (teste, exame e trabalho), cada nota tem um determinado valor percentual na nota final (teste - 30%, trabalho - 20% e exame - 50%).

Assim vamos criar uma interface que permite a leitura dos valores e que apresenta um botão para calcular o valor da nota final.

Primeiro preparamos a primeira activity com a seguinte interface:
Então temos três TextViews, que é o objeto que permite mostrar texto no ecrã, semelhante ao Label da plataforma .NET.
Incluímos, ainda, três EditTexts que permitem receber do utilizador os valores pretendidos, neste exemplo valores númericos, na plataforma .NET são as TextBoxes.
Por fim um botão.
O código XML ficou assim:

<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:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="@string/teste"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_marginTop="38dp"
        android:text="@string/exame"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <EditText
        android:id="@+id/txt_teste"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:ems="10"
        android:hint="Nota Teste"
        android:inputType="number|numberDecimal" />
    
    <EditText
        android:id="@+id/txt_exame"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/textView2"
        android:layout_alignBottom="@+id/textView2"
        android:layout_alignParentRight="true"
        android:ems="10"
        android:hint="Nota Exame"
        android:inputType="number|numberDecimal" />

    <EditText
        android:id="@+id/txt_trabalho"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/txt_exame"
        android:layout_marginTop="18dp"
        android:ems="10"
        android:hint="Nota Trabalho"
        android:inputType="number|numberDecimal" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/txt_trabalho"
        android:layout_alignBottom="@+id/txt_trabalho"
        android:layout_alignParentLeft="true"
        android:text="@string/trabalho"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/txt_trabalho"
        android:layout_marginTop="32dp"
        android:onClick="click_calcular"
        android:text="@string/calcular" />

</RelativeLayout>

No dispositivo móvel fica qualquer coisa como:

Agora toca a programar, a partir do código base basta indicar o comportamento do botão, para isso na propriedade onClick definimos o nome da função a chamar com o clique:
O código da função cria e executa uma intent que chama a activity que vai calcular a nota final, para que o cálculo seja possível é necessário passar para a activity as três notas. O código:

    public void click_calcular(View view){
    Intent intent = new Intent(this,CalculaNota.class);  //define a atividade a ser chamada
    //teste
    EditText editTextTeste = (EditText) findViewById(R.id.txt_teste);
    String message1 = editTextTeste.getText().toString();
    //exame
    EditText editTextExame = (EditText) findViewById(R.id.txt_exame);
    String message2 = editTextExame.getText().toString();
    //trabalho
    EditText editTextTrabalho = (EditText) findViewById(R.id.txt_trabalho);
    String message3 = editTextTrabalho.getText().toString();
   
    intent.putExtra(EXTRA_TESTE, message1);
    intent.putExtra(EXTRA_EXAME, message2);
    intent.putExtra(EXTRA_TRABALHO, message3);
    startActivity(intent);
    }

O resto do código fica tal e qual o Eclipse o gerou.

De seguida criamos outra classe para a segunda activity, o nome a atribuir é CalculaNota e a primeira coisa a fazer é recuperar as três notas passadas, de seguida calcular o valor da nota final e depois apresentar tudo na nova interface.
Agora por partes, primeiro criamos a interface com o seguinte código:

<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:id="@+id/txt_Teste"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="@string/teste"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/txt_Exame"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/txt_Teste"
        android:layout_marginTop="60dp"
        android:text="@string/exame"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/txt_Trabalho"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/txt_Teste"
        android:layout_marginTop="15dp"
        android:text="@string/trabalho"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/txt_NotaFinal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/txt_Exame"
        android:layout_marginTop="25dp"
        android:text="Medium Text"
        android:textAppearance="?android:attr/textAppearanceMedium" />

</RelativeLayout>

A interface é muito simples, apresenta quatro TextViews, uma para cada nota e outra para a nota final.
No editor a interface fica assim:
O nome deste layout é "resultado" assim o código da nova activity fica:

package edu.pjcferreira.NotaAluno;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class CalculaNota extends Activity{
//Chamada quando a atividade é criada
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //recolher as notas
        Intent intent = getIntent();
        //nota do teste
        String strTeste = intent.getStringExtra(MainActivity.EXTRA_TESTE);
        float teste=Float.parseFloat(strTeste);
        //nota do exame
        String strExame=intent.getStringExtra(MainActivity.EXTRA_EXAME);
        float exame=Float.parseFloat(strExame);
        //nota do trabalho
        String strTrabalho=intent.getStringExtra(MainActivity.EXTRA_TRABALHO);
        float trabalho=Float.parseFloat(strTrabalho);
        //nota final
        float notaFinal=(float) (teste*0.3+trabalho*0.2+exame*0.5);
        //mostra o novo layout
        setContentView(R.layout.resultado);
        //atualiza o novo layout com os dados
        //exame
        TextView txt_exame=(TextView)findViewById(R.id.txt_Exame);
        txt_exame.setText(txt_exame.getText() + " (50%): " + strExame);
        //tabalho
        TextView txt_trabalho=(TextView)findViewById(R.id.txt_Trabalho);
        txt_trabalho.setText(txt_trabalho.getText() + " (20%): " + strTrabalho);
        //teste
        TextView txt_teste=(TextView)findViewById(R.id.txt_Teste);
        txt_teste.setText(txt_teste.getText() + " (30%): " + strTeste);
        //nota final
        TextView txt_notafinal=(TextView)findViewById(R.id.txt_NotaFinal);
        txt_notafinal.setText("Nota Final: " + String.valueOf(notaFinal));
    }

}

No dispositivo móvel aparece assim quando clicamos no botão:
MUITO IMPORTANTE: temos de adicionar esta nova activity ao manifesto da aplicação se não o programa encerra ao clicar no botão, para isso basta fazer duplo clique no ficheiro do manifesto da aplicação a partir do explorador do projeto e adicionar através da interface ou diretamente no código XML.


Código XML:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="edu.pjcferreira.NotaAluno"
    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>
        <activity android:name="CalculaNota"></activity>
    </application>

</manifest>

E pronto o programa está pronto a executar.
O código fonte está aqui e o executável aqui.

Comentários

Mensagens populares deste blogue

Upgrade do Windows Home para Pro sem formatar

 Há algum tempo que tentava fazer o upgrade do meu Windows 10 da versão Home para a versão Pro, mas chegava sempre a um ponto em que me era solicitado para formatar o sistema e não estava para isso. Finalmente conseguinte seguindo estes passos: - seguinte estes passos  utilizei uma das chaves genéricas para o Windows 10 Pro e fui a Settings > Update & Security > Activation > Change the product key; - após inserir uma das chaves o Windows instala as funcionalidades Pro e pede para reiniciar; - agora tem o Windows Pro mas não está ativado, assim fui ao site urcdkeys  onde comprei uma chave para o Windows Pro por menos de €20; - com essa chave voltei a funcionalidade Change the product key e ativei o Windows; - e pronto, Windows Pro ativado sem formatar ou reinstalar. Importante : eu não tenho nada a ver com o site urcdkeys por isso a vossa experiência pode correr de forma diferente da minha.

Vamos fazer um carro com o Unity 3D

Neste artigo vamos fazer um carro, simples, com o Unity 3D. A ideia é utilizar o motor de física do Unity 3D para simular o comportamento do carro. Os passos a seguir são: [1] - Criar um projeto novo

Tem troco

Para hoje um pequeno programa que dá troco, bem dar não dá mas calcula o troco a dar em função das moedas disponíveis. Neste projeto vamos utilizar o novo Visual Studio 2012. Como era de se esperar vamos iniciar um projeto novo: Agora adicionamos os seguintes elementos:  - um botão para calcular as moedas a dar de troco  - um botão para repor o número de moedas iniciais disponíveis  - uma textbox para introduzir o valor a pagar  - uma textbox para introduzir o valor entregue  - umas labels para informar o utilizador do que deve introduzir e outra para mostrar o troco  - por fim uma grelha para mostrar os valores das moedas e as quantidades disponíveis de cada uma. A janela principal do programa fica assim: Agora o código, primeiro o evento load do formulário, neste vamos definir os valores das moedas e as respetivas quantidades Para guardar estes valores vamos necessitar de uma variável definida ao nível do formulário, logo abaixo da definição da class: Public Class Form1     Public mo