![]() |
Neste artigo vou mostrar como criar uma calculadora bem básica no Xamarin Android usando o Visual Studio 2015 e a linguagem C#. |
![]() |
Este é um artigo para inciantes que mostra de forma bem simples como criar uma calculadora para realizar as quatro operações básicas.
O artigo trabalha basicamente com controles Buttons e com eventos e não usa MVVM, o que seria mais indicado para o caso.
O projeto vai precisar as referências ao namespace System.Data.
Estou exibindo uma imagem no controle ImageView que foi colocada na pasta Resources/drawable com o nome de maco10.gif.
Recursos usados:
Visual Studio Community 2017 ou Xamarin Studio
Nota: Baixe e use a versão Community 2015 do VS ela é grátis e é equivalente a versão Professional.
Criando o projeto no VS Community 2017
Abra o VS 2015 Community e clique em New Project;
Selecione a linguagem Visual C# e o template Android -> Blank App(Android)
Informe o nome Droid_Calculadora e clique no botão OK;
Abra o arquivo Main.axml na pasta Resources/layout e no modo Designer e a seguir inclua a partir da ToolBox os seguintes controles:
Abaixo vemos o leiaute no emulador do Xamarin e ao lado o respectivo código XML gerado :
![]() |
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:background="#088da5"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imagemMac"
android:layout_width="300dp"
android:layout_height="80dp"
android:src="@drawable/maco10"
android:layout_gravity="center"
android:scaleType="fitCenter" />
<EditText
android:inputType="text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/resultText"
android:background="@android:color/darker_gray"
android:textColor="@android:color/background_dark"
android:textSize="@android:dimen/app_icon_size"
android:cursorVisible="false"
android:clickable="false"
android:editable="false"
android:enabled="false" />
<EditText
android:inputType="number"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/resultText2"
android:background="@android:color/background_light"
android:textColor="@android:color/background_dark"
android:textSize="@android:dimen/app_icon_size"
android:cursorVisible="false"
android:enabled="false"
android:editable="false"
android:clickable="false" />
<LinearLayout
android:id="@+id/wrapper1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/wrapper0"
android:weightSum="1.0">
<Button
android:text="1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight=".25"
android:id="@+id/btn1" />
<Button
android:text="2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/btn1"
android:layout_alignTop="@+id/btn1"
android:layout_weight=".25"
android:id="@+id/btn2" />
<Button
android:text="3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/btn2"
android:layout_alignTop="@+id/btn2"
android:layout_weight=".25"
android:id="@+id/btn3" />
<Button
android:text="DEL"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/btn3"
android:layout_alignTop="@+id/btn3"
android:layout_weight=".25"
android:id="@+id/btnDel" />
</LinearLayout>
<LinearLayout
android:id="@+id/wrapper2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/wrapper1"
android:weightSum="1.0">
<Button
android:text="4"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_below="@+id/wrapper2"
android:layout_weight=".25"
android:id="@+id/btn4" />
<Button
android:text="5"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/btn4"
android:layout_alignTop="@+id/btn4"
android:layout_weight=".25"
android:id="@+id/btn5" />
<Button
android:text="6"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/btn5"
android:layout_alignTop="@+id/btn5"
android:layout_weight=".25"
android:id="@+id/btn6" />
<Button
android:text="-"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/btn6"
android:layout_alignTop="@+id/btn6"
android:layout_weight=".25"
android:id="@+id/btnSub" />
</LinearLayout>
<LinearLayout
android:id="@+id/wrapper3"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/wrapper2"
android:weightSum="1.0">
<Button
android:text="7"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_below="@+id/wrapper3"
android:layout_weight=".25"
android:id="@+id/btn7" />
<Button
android:text="8"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/btn7"
android:layout_alignTop="@+id/btn7"
android:layout_weight=".25"
android:id="@+id/btn8" />
<Button
android:text="9"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/btn8"
android:layout_alignTop="@+id/btn8"
android:layout_weight=".25"
android:id="@+id/btn9" />
<Button
android:text="x"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/btn9"
android:layout_alignTop="@+id/btn9"
android:layout_weight=".25"
android:id="@+id/btnMul" />
</LinearLayout>
<LinearLayout
android:id="@+id/wrapper4"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/wrapper3"
android:weightSum="1.0">
<Button
android:text="."
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_below="@+id/btn7"
android:layout_weight=".20"
android:id="@+id/btnDot" />
<Button
android:text="0"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/btnDot"
android:layout_alignTop="@+id/btnDot"
android:layout_weight=".20"
android:id="@+id/btn0" />
<Button
android:text="="
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/btn0"
android:layout_alignTop="@+id/btnDot"
android:layout_weight=".20"
android:id="@+id/btnEql" />
<Button
android:text="/"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/btnEql"
android:layout_alignTop="@+id/btnEql"
android:layout_weight=".20"
android:id="@+id/btnDiv" />
<Button
android:text="+"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/btnDiv"
android:layout_alignTop="@+id/btnDiv"
android:layout_weight=".20"
android:id="@+id/btnAdd" />
</LinearLayout>
</LinearLayout>
|
Agora vamos definir o código no arquivo MainActivity.cs vinculado a nossa view Main.axml.
Tratando a entrada do usuário e fazendo as quatro operações
Abra o arquivo MainActivity.cs e altere o código desse arquivo conforme abaixo:
using Android.App;
using Android.Widget;
using Android.OS;
using System;
using System.Data;
namespace Droid_Calculadora
{
[Activity(Label = "Droid_Calculadora", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView (Resource.Layout.Main);
ImageView img = FindViewById<ImageView>(Resource.Id.imagemMac);
img.SetImageResource(Resource.Drawable.maco10);
//Botões para entrada de valores
Button num1 = (Button)FindViewById(Resource.Id.btn1);
Button num2 = (Button)FindViewById(Resource.Id.btn2);
Button num3 = (Button)FindViewById(Resource.Id.btn3);
Button num4 = (Button)FindViewById(Resource.Id.btn4);
Button num5 = (Button)FindViewById(Resource.Id.btn5);
Button num6 = (Button)FindViewById(Resource.Id.btn6);
Button num7 = (Button)FindViewById(Resource.Id.btn7);
Button num8 = (Button)FindViewById(Resource.Id.btn8);
Button num9 = (Button)FindViewById(Resource.Id.btn9);
Button num0 = (Button)FindViewById(Resource.Id.btn0);
//Botões para as operações matematicas
Button equ = (Button)FindViewById(Resource.Id.btnEql);
Button clr = (Button)FindViewById(Resource.Id.btnDel);
Button dot = (Button)FindViewById(Resource.Id.btnDot);
Button div = (Button)FindViewById(Resource.Id.btnDiv);
Button mul = (Button)FindViewById(Resource.Id.btnMul);
Button som = (Button)FindViewById(Resource.Id.btnAdd);
Button sub = (Button)FindViewById(Resource.Id.btnSub);
//texto para receber a entrada do usuário
EditText resu = (EditText)FindViewById(Resource.Id.resultText);
// Texto para exibir o resultado gerado
EditText resu2 = (EditText)FindViewById(Resource.Id.resultText2);
//sempre que o texto no EditText mudar a expressão será calculada
resu.TextChanged += delegate
{
if (resu.Text == "")
{
resu2.Text = "";
}
string x = resu.Text;
try
{
//Calcula a expressão
double result = Convert.ToDouble(new DataTable().Compute(x, null));
resu2.Text = result.ToString();
}
catch (Exception)
{
//sem ação
}
};
//define os eventos dos botões de comando
num1.Click += delegate { resu.Text = resu.Text + num1.Text.ToString(); };
num2.Click += delegate { resu.Text = resu.Text + num2.Text.ToString(); };
num3.Click += delegate { resu.Text = resu.Text + num3.Text.ToString(); };
num4.Click += delegate { resu.Text = resu.Text + num4.Text.ToString(); };
num5.Click += delegate { resu.Text = resu.Text + num5.Text.ToString(); };
num6.Click += delegate { resu.Text = resu.Text + num6.Text.ToString(); };
num7.Click += delegate { resu.Text = resu.Text + num7.Text.ToString(); };
num8.Click += delegate { resu.Text = resu.Text + num8.Text.ToString(); };
num9.Click += delegate { resu.Text = resu.Text + num9.Text.ToString(); };
num0.Click += delegate { resu.Text = resu.Text + num0.Text.ToString(); };
//define os eventos das operações
dot.Click += delegate
{
string x = resu.Text;
int l = x.Length;
if (l != 0)
{
string x2 = x.Substring(l - 1, 1);
if (x2 != ".")
{
if (x2 == "-" || x2 == "*" || x2 == "/" || x2 == "+")
{
string s1 = x.Substring(0, l - 1);
resu.Text = s1;
}
resu.Text = resu.Text + dot.Text.ToString();
}
}
};
som.Click += delegate
{
string x = resu.Text;
int l = x.Length;
if (l != 0)
{
string x2 = x.Substring(l - 1, 1);
if (x2 != "+")
{
if (x2 == "-" || x2 == "*" || x2 == "/" || x2 == ".")
{
string s1 = x.Substring(0, l - 1);
resu.Text = s1;
}
resu.Text = resu.Text + som.Text.ToString();
}
}
};
sub.Click += delegate
{
string x = resu.Text;
int l = x.Length;
if (l != 0)
{
string x2 = x.Substring(l - 1, 1);
if (x2 != "-")
{
if (x2 == "+" || x2 == "*" || x2 == "/" || x2 == ".")
{
string s1 = x.Substring(0, l - 1);
resu.Text = s1;
}
resu.Text = resu.Text + sub.Text.ToString();
}
}
};
mul.Click += delegate
{
string x = resu.Text;
int l = x.Length;
if (l != 0)
{
string x2 = x.Substring(l - 1, 1);
if (x2 != "*")
{
if (x2 == "-" || x2 == "+" || x2 == "/" || x2 == ".")
{
string s1 = x.Substring(0, l - 1);
resu.Text = s1;
}
resu.Text = resu.Text + "*";
}
}
};
div.Click += delegate
{
string x = resu.Text;
int l = x.Length;
if (l != 0)
{
string x2 = x.Substring(l - 1, 1);
if (x2 != "/")
{
if (x2 == "-" || x2 == "*" || x2 == "+" || x2 == ".")
{
string s1 = x.Substring(0, l - 1);
resu.Text = s1;
}
resu.Text = resu.Text + div.Text.ToString();
}
}
};
clr.Click += delegate
{
string x = resu.Text;
int l = x.Length;
if (l != 0)
{
string x2 = x.Substring(0, l - 1);
resu.Text = x2;
if (x2.Length != 0)
{
string x3 = x2.Substring(l - 2, 1);
if (x3 == "+" || x3 == "-" || x3 == "*" || x3 == "/" || x3 == ".")
{
try
{
double result = Convert.ToDouble(new DataTable().Compute(x.Substring(0, l - 2), null));
resu2.Text = result.ToString();
}
catch (Exception)
{
//sem ação
}
}
}
}
};
equ.Click += delegate
{
if (resu2.Text != "")
{
resu.Text = resu2.Text;
resu2.Text = "";
}
};
}
private void Resu_TextChanged(object sender, Android.Text.TextChangedEventArgs e)
{
throw new System.NotImplementedException();
}
}
}
|
O código é bem simples e na verdade não esta levando em conta a precedência das operações o que pode gerar resultados inconsistentes. Fica como exercício implementar esse recurso.
Para as quatro operações básicas o código funciona.
Executando o projeto usando o emulador Genymotion iremos obter o seguinte resultado:
![]() |
![]() |
Pegue o
projeto aqui :
Droid_Calculadora.zip (sem as referências)
Se dissermos que temos comunhão com ele
(Jesus), e andarmos em trevas, mentimos, e não praticamos a verdade.
Mas, se andarmos na luz, como ele na luz está, temos comunhão uns com os outros,
e o sangue de Jesus Cristo, seu Filho, nos purifica de todo o pecado.
1 João 1:6,7
|
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a
Objetos com VB .NET
![]()
Xamarim - Desenvolvimento Multiplataforma com C# ... - Macoratti.net
Xamarin.Forms - Olá Mundo - Criando sua primeira ... - Macoratti.net
Xamarin.Forms - Olá Mundo - Anatomia da aplicação - Macoratti.net
https://developer.xamarin.com/api/type/Android.App.AlertDialog/
https://developer.android.com/reference/android/app/Activity.html
https://developer.xamarin.com/api/type/Android.Widget.ProgressBar/