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