domingo, 8 de setembro de 2013

Android - Tutorial de criação de uma calculadora (JAVA)

Bom galera,

Eís o primeiro tutorial simples de como criar uma calculadora no Android. nada como um domingo 1 hora da tarde com um sol "merqui-fogo" e se o processador não pegar fogo eu terminarei esse tutorial e mostrarei para vocês.

Vi na faculdade, numa das aulas da disciplina de programação para dispositivos moveis, a dificuldade que o povo tinha de entender ou mesmo de conseguir fazer funcionar a calculadora. Eu achei um exercício bem intuitivo, acharia legal para qualquer um aprender, então chega de enrolação e vamos começar:

Primeiro abra o eclipse, crie um novo projeto Android






chame o projeto do que você quiser, eu vou chama-lo de calculadora.

primeiramente crie uma activity(se não tiver criada) é só clicar com o botão direito na pasta
src >> new >> outher >> digite "Android Activity" >> clique em "OK"
escolha a blank activity der o nome MainActivity >> clique em Finish
va em res>layout
crie essa tela de layout do android desse jeito, com um EditText e outros botões

para facilitar aqui está o código XML desta tela

activity_main.xml
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
   xmlns:tools="http://schemas.android.com/tools"  
   android:id="@+id/RelativeLayout1"  
   android:layout_width="match_parent"  
   android:layout_height="match_parent"  
   android:paddingBottom="@dimen/activity_vertical_margin"  
   android:paddingLeft="@dimen/activity_horizontal_margin"  
   android:paddingRight="@dimen/activity_horizontal_margin"  
   android:paddingTop="@dimen/activity_vertical_margin"  
   tools:context=".MainActivity" >  
   <EditText  
     android:id="@+id/Resutado"  
     android:layout_width="fill_parent"  
     android:layout_height="wrap_content"  
     android:layout_alignParentTop="true"  
     android:layout_centerHorizontal="true"  
     android:layout_marginTop="18dp"  
     android:ems="10" />  
   <Button  
     android:id="@+id/button7"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_alignLeft="@+id/Resutado"  
     android:layout_below="@+id/Resutado"  
     android:text="7" />  
   <Button  
     android:id="@+id/button8"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_below="@+id/Resutado"  
     android:layout_toRightOf="@+id/button7"  
     android:text="8" />  
   <Button  
     android:id="@+id/button9"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_below="@+id/Resutado"  
     android:layout_toRightOf="@+id/button8"  
     android:text="9" />  
   <Button  
     android:id="@+id/button4"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_below="@+id/button7"  
     android:layout_toLeftOf="@+id/button8"  
     android:text="4" />  
   <Button  
     android:id="@+id/button5"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_alignBaseline="@+id/button4"  
     android:layout_alignBottom="@+id/button4"  
     android:layout_alignLeft="@+id/button8"  
     android:text="5" />  
   <Button  
     android:id="@+id/button6"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_alignBaseline="@+id/button5"  
     android:layout_alignBottom="@+id/button5"  
     android:layout_toRightOf="@+id/button5"  
     android:text="6" />  
   <Button  
     android:id="@+id/button1"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_alignRight="@+id/button4"  
     android:layout_below="@+id/button4"  
     android:text="1" />  
   <Button  
     android:id="@+id/button2"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_alignLeft="@+id/button5"  
     android:layout_below="@+id/button5"  
     android:text="2" />  
   <Button  
     android:id="@+id/button3"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_alignBaseline="@+id/button2"  
     android:layout_alignBottom="@+id/button2"  
     android:layout_alignLeft="@+id/button6"  
     android:text="3" />  
   <Button  
     android:id="@+id/button0"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_alignLeft="@+id/button1"  
     android:layout_below="@+id/button1"  
     android:layout_toLeftOf="@+id/button2"  
     android:text="0" />  
   <Button  
     android:id="@+id/buttonSoma"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_alignBottom="@+id/button0"  
     android:layout_alignTop="@+id/button0"  
     android:layout_toRightOf="@+id/button6"  
     android:text="+" />  
   <Button  
     android:id="@+id/buttonSubtrai"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_above="@+id/buttonSoma"  
     android:layout_alignLeft="@+id/buttonSoma"  
     android:text="-" />  
   <Button  
     android:id="@+id/buttonZera"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_alignBaseline="@+id/button0"  
     android:layout_alignBottom="@+id/button0"  
     android:layout_toLeftOf="@+id/buttonSoma"  
     android:text="CE" />  
   <Button  
     android:id="@+id/buttonMulti"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_above="@+id/buttonSubtrai"  
     android:layout_alignLeft="@+id/buttonSubtrai"  
     android:text="*" />  
   <Button  
     android:id="@+id/buttonDivide"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_alignLeft="@+id/buttonMulti"  
     android:layout_below="@+id/Resutado"  
     android:text="/" />  
   <Button  
     android:id="@+id/buttonIgual"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_alignBaseline="@+id/button0"  
     android:layout_alignBottom="@+id/button0"  
     android:layout_toRightOf="@+id/button0"  
     android:text="=" />  
 </RelativeLayout>  

com o código em mãos (copiado e colado) vamos começar a "bulir" na activity do android.
quando abrir você vai encontrar a estrutura padrão de uma activity.


 package br.estacio.calculadora;  
 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_teste);  
      }  
      @Override  
      public boolean onCreateOptionsMenu(Menu menu) {  
           // Inflate the menu; this adds items to the action bar if it is present.  
           getMenuInflater().inflate(R.menu.teste, menu);  
           return true;  
      }  
 }  

vou dar uma rápida explicação sobre o que ta acontecendo em cada linha pra que ninguém fique com dúvida

Aqui nossa classe está herdando da classe principal do android, a activity
 public class MainActivity extends Activity  


logo em seguida ele faz uma sobrescreve o método da base, o create, e inicia o ciclo de vida da atividade
 @Override  
      protected void onCreate(Bundle savedInstanceState) {  
           super.onCreate(savedInstanceState);  
é nesse método que devemos pegar todos os botões e atribuir eventos a ele, e você percebe que logo abaixo ele chama o método original da classe,

 super.onCreate(savedInstanceState);  

eu costumo colocar todos os botões como propriedades da classe, assim consigo aproveitar eles em todos os metodos da minha classe activity dessa forma

public class MainActivity extends Activity { 
        Button Button0;
 Button Button1;
 Button Button2;
 Button Button3;
 Button Button4;
 Button Button5;
 Button Button6;
 Button Button7;
 Button Button8;
 Button Button9;
 Button ButtonZera;
 Button ButtonSoma;
 Button ButtonSubtrai;
 Button ButtonDivide;
 Button ButtonMulti;
 Button ButtonIgual;
 EditText Resutado;
 
 String CampoTemp1;
 String CampoTemp2;
 int operacao;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  this.onInit();
  this.OnRender();
 }

 como gosto de organizar as coisas eu chamo dois metodos dentro do create, o onInit() e o OnRender,
ambos eu crio cada um com sua responsabilidade.
o OnInit() ele vai inciar meus controles do android, isso é, pegar cada um deles e indentifica-los nos metodos, dessa forma

 private void onInit()  
      {  
           setContentView(R.layout.activity_main);  
           Button0 = (Button) findViewById(R.id.button0);  
           Button1 = (Button) findViewById(R.id.button1);  
           Button2 = (Button) findViewById(R.id.button2);  
           Button3 = (Button) findViewById(R.id.button3);  
           Button4 = (Button) findViewById(R.id.button4);  
           Button5 = (Button) findViewById(R.id.button5);  
           Button6 = (Button) findViewById(R.id.button6);  
           Button7 = (Button) findViewById(R.id.button7);  
           Button8 = (Button) findViewById(R.id.button8);  
           Button9 = (Button) findViewById(R.id.button9);  
           ButtonZera = (Button) findViewById(R.id.buttonZera);  
           ButtonSoma = (Button) findViewById(R.id.buttonSoma);  
           ButtonSubtrai = (Button) findViewById(R.id.buttonSubtrai);  
           ButtonMulti = (Button) findViewById(R.id.buttonMulti);  
           ButtonDivide = (Button) findViewById(R.id.buttonDivide);  
           Resutado = (EditText) findViewById(R.id.Resutado);  
           ButtonIgual = (Button) findViewById(R.id.buttonIgual);  
           CampoTemp1 = "";  
           CampoTemp2 = "";  
      }  

uma observação,
O setContentView
 setContentView(R.layout.activity_main);  
você informa ao Activity qual xml ele deve renderizar, isso é muito importante, pois caso você esqueça de informar, ou informa o errado, pode acontecer problemas com o seu codigo não funcionar e ficar dando erro, uma dica simples.

E no render para atribuir os eventos aos controles
 private void OnRender()  
      {  
           Button0.setOnClickListener(new Button.OnClickListener() {  
                public void onClick(View arg0) {  
                     // TODO Auto-generated method stub  
                     setResult(Button0);  
                }  
           });  
           Button1.setOnClickListener(new Button.OnClickListener() {  
                          public void onClick(View arg0) {  
                               // TODO Auto-generated method stub  
                               setResult(Button1);  
                          }  
                     });  
           Button2.setOnClickListener(new Button.OnClickListener() {  
                public void onClick(View arg0) {  
                     // TODO Auto-generated method stub  
                     setResult(Button2);  
                }  
           });  
           Button3.setOnClickListener(new Button.OnClickListener() {  
                public void onClick(View arg0) {  
                     // TODO Auto-generated method stub  
                     setResult(Button3);  
                }  
           });  
           Button4.setOnClickListener(new Button.OnClickListener() {  
                public void onClick(View arg0) {  
                     // TODO Auto-generated method stub  
                     setResult(Button4);  
                }  
           });  
           Button5.setOnClickListener(new Button.OnClickListener() {  
                public void onClick(View arg0) {  
                     // TODO Auto-generated method stub  
                     setResult(Button5);  
                }  
           });  
           Button6.setOnClickListener(new Button.OnClickListener() {  
           public void onClick(View arg0) {  
           // TODO Auto-generated method stub  
           setResult(Button6);  
           }  
           });  
           Button7.setOnClickListener(new Button.OnClickListener() {  
                public void onClick(View arg0) {  
                     // TODO Auto-generated method stub  
                     setResult(Button7);  
                }  
           });  
           Button8.setOnClickListener(new Button.OnClickListener() {  
           public void onClick(View arg0) {  
           // TODO Auto-generated method stub  
           setResult(Button8);  
           }  
           });  
           Button9.setOnClickListener(new Button.OnClickListener() {  
                public void onClick(View arg0) {  
                     // TODO Auto-generated method stub  
                     setResult(Button1);  
                }  
           });  
 ButtonSoma.setOnClickListener(new Button.OnClickListener() {  
                public void onClick(View arg0) {  
                     // TODO Auto-generated method stub  
                     operacao = 1;  
                }  
           });  
 ButtonSubtrai.setOnClickListener(new Button.OnClickListener() {  
      public void onClick(View arg0) {  
           // TODO Auto-generated method stub  
           operacao = 2;  
      }  
 });  
 ButtonMulti.setOnClickListener(new Button.OnClickListener() {  
      public void onClick(View arg0) {  
           // TODO Auto-generated method stub  
           operacao = 3;  
      }  
 });  
 ButtonDivide.setOnClickListener(new Button.OnClickListener() {  
      public void onClick(View arg0) {  
           // TODO Auto-generated method stub  
           operacao = 4;  
      }  
 });  
 ButtonZera.setOnClickListener(new Button.OnClickListener() {  
      public void onClick(View arg0) {  
           // TODO Auto-generated method stub  
           operacao = 0;  
           CampoTemp1 = "";  
           CampoTemp2 = "";  
           Resutado.setText("");  
      }  
 });  
 ButtonIgual.setOnClickListener(new Button.OnClickListener() {  
      public void onClick(View arg0) {  
           // TODO Auto-generated method stub  
           if(CampoTemp1 != "" && CampoTemp2 != "")  
           {  
                setResultadoFinal();  
           }  
      }  
 });  
      }  

e finalmente os metodos que irão fazer todos os calculos

 private void setResult(Button botao)  
      {  
           if(operacao == 0)  
           {  
                CampoTemp1 = Resutado.getText().toString() + botao.getText().toString();  
                Resutado.setText(CampoTemp1);  
           }  
           else  
           {  
                if(CampoTemp2 == "")  
                {  
                     Resutado.setText("");  
                }  
                CampoTemp2 = Resutado.getText().toString() + botao.getText().toString();  
                Resutado.setText(CampoTemp2);  
           }  
      }  
      private void setResultadoFinal()  
      {  
           Resutado.setText("");  
           double resutadoD = 0;  
           switch (operacao)  
           {  
           case 1: //soma  
                resutadoD = Double.parseDouble(CampoTemp2) + Double.parseDouble(CampoTemp1);  
                Resutado.setText(CampoTemp2);  
                break;  
           case 2: //subtrai  
                resutadoD = Double.parseDouble(CampoTemp2) - Double.parseDouble(CampoTemp1);  
                Resutado.setText(CampoTemp2);  
                break;  
           case 3: //multi  
                resutadoD = Double.parseDouble(CampoTemp2) * Double.parseDouble(CampoTemp1);  
                Resutado.setText(CampoTemp2);  
                break;  
           case 4: //divide  
                resutadoD= Double.parseDouble(CampoTemp2) / Double.parseDouble(CampoTemp1);  
                Resutado.setText(CampoTemp2);  
                break;  
           }  
           Resutado.setText(Double.toString(resutadoD));  
      }  

pronto, calculadora pronta, qualquer dúvida, não deixe de comentar aí.
 ♪ Você pergunta e o Marcos responde ♫

então é isso ai galera, deixei o projeto abaixo para download, pra vocês se divertirem, pode modificar, melhorar o importante é participar, não deixem de postar suas dicas aqui como  esse código pode ser melhorado.


faça o download do exemplo da calculadora

Um comentário:

  1. Borgata Hotel Casino & Spa - Promotions - JTM Hub
    Book online Borgata Hotel Casino & 과천 출장안마 Spa or 인천광역 출장마사지 your next 서귀포 출장안마 hotel 보령 출장샵 stay with JTM Rewards®. Borgata Hotel 충청남도 출장마사지 Casino & Spa, Atlantic City.

    ResponderExcluir

Comente você também