Bu dersimizde temel olarak dört işlemi kapsayan, sayısal değer ve boş girdi kontrollerini yapan basit bir hesap makinesi yapalım.

İlk olarak bir tane boş activity açalım.
Proje Oluşturma

Android Proje Oluşturma

Projemizin ayarlamalarını yapalım.
Proje Ayarları

Android Proje Oluşturma Ayarlar

Projemiz oluştu. Oluşan bu boş projenin dosyalarına bakalım.
Boş Proje Yapısı

Android Boş Proje Yapısı

Oluşturacağımız projenin EditTextTextView gibi elemanlarının biraz daha güzel görünmesi için drawable klasörüne bir tane shape_kenarlik.xml ekleyip renk, kenarlık gibi değerlerini içerisinde belirtelim.
Drawable Klasörüne Tasarım Nesnesi Ekleyelim

Drawable Klasörüne Tasarım Nesnesi Ekleyelim

Açılan pencerede şu bilgilerle bir adet shape_kenarlik.xml dosyası oluşturalım.
shape_kenarlik.xml

shape_kenarlik.xml

shape_kenarlik.xml Betikleri

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
  <solid android:color="#f2f2f2" />
  <stroke android:width="1dip" android:color="#FF6200EE"/>
</shape>

shape_kenarlik.xml Görünüm

shape_kenarlik.xml Görünüm

Ufak tefek hazırlıkları tamamladık. Sıra geldi ekrandaki öğeleri tasarlamaya. Ekran öğelerimiz şu şekilde olacak
activity_main.xml Betikleri

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <linearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="10dp"
        android:orientation="vertical">
        <linearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:weightSum="5">
            <com.google.android.material.textfield.TextInputLayout
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:hint="Sayı 1"
                android:layout_weight="1"
                android:layout_marginRight="2dp">
                <com.google.android.material.textfield.TextInputEditText
                    android:id="@+id/etSayi1"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:ems="10"
                    android:inputType="numberDecimal"
                    android:background="@drawable/shape_kenarlik"
                    android:gravity="center"/>
            </com.google.android.material.textfield.TextInputLayout>
            <com.google.android.material.textfield.TextInputLayout
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:hint="İşlem"
                android:layout_weight="1"
                android:layout_marginRight="2dp">
                <com.google.android.material.textfield.TextInputEditText
                    android:id="@+id/etIslem"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:ems="1"
                    android:inputType="text"
                    android:background="@drawable/shape_kenarlik"
                    android:gravity="center"/>
            </com.google.android.material.textfield.TextInputLayout>
            <com.google.android.material.textfield.TextInputLayout
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:hint="Sayı 2"
                android:layout_weight="1"
                android:layout_marginRight="2dp">
                <com.google.android.material.textfield.TextInputEditText
                    android:id="@+id/etSayi2"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:ems="10"
                    android:inputType="numberDecimal"
                    android:background="@drawable/shape_kenarlik"
                    android:gravity="center"/>
            </com.google.android.material.textfield.TextInputLayout>
            <com.google.android.material.textfield.TextInputLayout
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:layout_marginRight="2dp">
                <com.google.android.material.textfield.TextInputEditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:ems="1"
                    android:inputType="text"
                    android:background="@drawable/shape_kenarlik"
                    android:gravity="center"
                    android:text="="
                    android:enabled="false"/>
            </com.google.android.material.textfield.TextInputLayout>
            <com.google.android.material.textfield.TextInputLayout
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:hint="Sonuç"
                android:layout_weight="1">
                <com.google.android.material.textfield.TextInputEditText
                    android:id="@+id/etSonuc"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:ems="10"
                    android:inputType="text"
                    android:background="@drawable/shape_kenarlik"
                    android:gravity="center"
                    android:enabled="false"/>
            </com.google.android.material.textfield.TextInputLayout>
        </LinearLayout>
        <linearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp">
            <Button
                android:id="@+id/btnSonuc"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:text="Hesapla"/>
        </LinearLayout>
    </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

Tasarım Önizleme

Tasarım Önizleme

Tasarım çalışması bitti. Hesaplamalar için yapılması gereken kodlamaya geçelim. Kodlama kısmındaki işleyiş;
– EditText, Button gibi tasarım nesnelerini global olarak tanımlayacağız.
– findViewById metodu sayesinde tasarım nesnelerini xml içerisinde bulacağız.
– Button setOnClickListener olayı sayesinde btnHesapla adlı butona tıklandığını anlayıp işlemlerimizi başlatacağız.
– getText() metodu ile EditText nesnelerine girilen değerleri alıp bir değişkene aktaracağız.
– Regular Expressions (Düzenli İfadeler) sayesinde girilen bir değerin istediğimiz düzende olup olmadığını kontrol edeceğiz. Örnek olarak girilen bir değerin double olup olmadığını kontrol edeceğiz.
– if koşulu ile gereken şartların sağlanıp sağlanmadığını kontrol edeceğiz. Örnek olarak bir sayının sıfıra bölümünün tanımsız olduğunu bildireceğiz.
– Toast Mesaj sayesinde kullanıcıya uyarı verdireceğiz.
– TextUtils.isEmpty() ile bir değerin var olup olmadığını kontrol edeceğiz.
– switch case yapısı ile çarpma, bölme, çıkarma ve toplama işlemlerinin yapılmasını sağlayacağız.
– setText() metodu ile çıkan sonucu ilgili EditText’e yazdıracağız.
Kısaca işleyiş yapısını sizlere aktarmış olduk. Şimdi uygulama açıldığında çalışan activity olan (MainActivity.java) içerisinde kodlarımızı hazırlayalım.
MainActivity.java

package com.deneme.hesapmakinesi;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    EditText etSayi1, etIslem, etSayi2, etSonuc;
    Button btnSonuc;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        etSayi1 = (EditText) findViewById(R.id.etSayi1);
        etIslem = (EditText) findViewById(R.id.etIslem);
        etSayi2 = (EditText) findViewById(R.id.etSayi2);
        etSonuc = (EditText) findViewById(R.id.etSonuc);
        btnSonuc = (Button) findViewById(R.id.btnSonuc);

        btnSonuc.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String strSayi1 = etSayi1.getText().toString();
                String strSayi2 = etSayi2.getText().toString();
                String strIslem = etIslem.getText().toString();
                etSonuc.setText("");
                boolean blnSayi1 = fnDoubleKontrol(strSayi1);
                boolean blnSayi2 = fnDoubleKontrol(strSayi2);
                boolean blnIslem = fnIslemKontrol(strIslem);
                String strUyari = "";
                if (!blnSayi1)
                    strUyari = "- Lütfen sayı 1 giriniz.\n";
                if (!blnSayi2)
                    strUyari += "- Lütfen sayı 2 giriniz.\n";
                if (!blnIslem)
                    strUyari += "- Lütfen '+', '-', '*' veya '/' işlemi giriniz.\n";
                else
                {
                    if (strIslem.equals("/"))
                    {
                        if (strSayi2.contains("0"))
                            strUyari += "- Bir sayının sıfıra bölümü tanımsızdır";
                    }
                }

                if (!TextUtils.isEmpty(strUyari))
                    Toast.makeText(getApplicationContext(), strUyari, Toast.LENGTH_LONG).show();
                else
                {
                    String strSonuc = "";
                    switch(strIslem) {
                        CASE "+":
                            strSonuc = String.valueOf(Double.parseDouble(strSayi1) + Double.parseDouble(strSayi2));
                            break;
                        CASE "-":
                            strSonuc = String.valueOf(Double.parseDouble(strSayi1) - Double.parseDouble(strSayi2));
                            break;
                        CASE "/":
                            strSonuc = String.valueOf(Double.parseDouble(strSayi1) / Double.parseDouble(strSayi2));
                            break;
                        CASE "*":
                            strSonuc = String.valueOf(Double.parseDouble(strSayi1) * Double.parseDouble(strSayi2));
                            break;
                        default:
                            break;
                    }
                    etSonuc.setText(strSonuc);
                }
            }
        });
    }
    public boolean fnDoubleKontrol(String strDeger)
    {
        boolean blnSonuc = false;
        if (!TextUtils.isEmpty(strDeger))
            blnSonuc = strDeger.matches("[0-9]{1,13}(\\.[0-9]*)?");
        return blnSonuc;
    }
    public boolean fnIslemKontrol(String strDeger)
    {
        boolean blnSonuc = false;
        if (!TextUtils.isEmpty(strDeger))
        {
            if (strDeger.equals("+") || strDeger.equals("-") || strDeger.equals("*") || strDeger.equals("/"))
                blnSonuc = true;
        }
        return blnSonuc;
    }
}

Örnek 1

Android Hesap Makinesi Örnek 1

Örnek

Android'de Java ile Basit Hesap Makinesi Yapalım

Leave A Comment

All fields marked with an asterisk (*) are required