Android Hesap Makinesi

Android uygulama geliştirmeye merak salanlar nedendir bilinmez genellikle ilk olarak bir hesap makinesi uygulaması oluşturmaya çalışırlar. Örnek bir uygulama görerek uygulama geliştirmek bence daha kolaydır. Bu sebeple basit bir hesap makinesi örneği oluşturup bunu blog sitemde yayınlamaya karar verdim.

Android Studio uygulaması kullanarak, ConstraintLayout üzerinden tasarım yaparak ilerleyeceğiz. Adım adım işlemleri takip ederek uygulamayı oluşturmuş olacaksınız,

Şekil-1: Yeni Proje oluştur

Android Studio açtıktan sonra yeni proje oluştur dedikten sonra Şekil-1’deki ekrana ulaşacaksınız. Buradan Empty Activity seçeneği ile seçip devam edebilirsiniz.

Şekil-2: Yeni Proje Yapılandırması

Empty Activity seçeneğini seçip devam ettikten sonra karşımıza Şekil-2’deki yapılandırma penceresi açılacaktır. Burada Name kısmına projemizin ismini Package name kısmına ise com.yapimciKisiveyaFirma.ProjeIsmi şeklinde giriş yapıyoruz. Daha sonra neden bu şekilde giriş yapıldığını fırsat bulursam anlatacağım ancak temelde projemizi Google PlayStore’da yayınlarken kullanacağımızı bilmeniz yeterlidir.

Şekil-3: Yeni Proje Başlangıç Ekranı

Yapılandırma kısmını geçip ilerledikten sonra karşımıza boş bir proje çıkmaktadır. Basit bir hesap makinası uygulaması yapacağız ve şu an için bizim ilgilenmemiz gereken kısımlar java içerisindeki MainActivity dosyası ve res içinde layaut içerisindeki activity_main.xml dosyasıdır. Bu dosyalar otomatik bir şekilde oluşturuldu. Şekil-3’de MainActivity içerisindeki java kodlarını görüyoruz.

Şekil-4: Yeni Proje Layout XML dosyası

Uygulamamızın tasarım kısını görsel olarak Şekil-4’deki gibi activity_main.xml dosyası üzerinden yapıyoruz. Sol tarafta gördüğümüz tool palet üzerinden çek bırak ile tasarım yapabildiğimiz gibi bunu yine kodlar ile de yapabiliriz.

Şekil-5: Kod ile Activity_Main.XML

Ekrana eklenen TextView ögesinin kodları aşağıdaki gibidir. Bizde hesap makinası uygulamasına butonlar ve textView ekleyerek bir şekil ortaya çıkaracağız. Bu kodlar aşağıdaki gibi olacaktır.

<?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"
    android:background="@android:color/background_dark"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btn0"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginStart="5dp"
        android:layout_marginLeft="5dp"
        android:layout_marginBottom="5dp"
        android:background="?attr/colorButtonNormal"
        android:text="0"
        android:textSize="36sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@id/btn3"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/btn2"
        app:layout_constraintVertical_bias="0"
        tools:ignore="MissingConstraints" />

    <Button
        android:id="@+id/btnVirgul"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginBottom="5dp"
        android:background="?attr/colorButtonNormal"
        android:text=","
        android:textSize="36sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/btnEsittir"
        app:layout_constraintStart_toEndOf="@id/btn2"
        app:layout_constraintTop_toBottomOf="@+id/btn3"
        app:layout_constraintVertical_bias="0.0"
        tools:ignore="MissingConstraints" />

    <Button
        android:id="@+id/btnEsittir"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginEnd="5dp"
        android:layout_marginBottom="5dp"
        android:background="@android:color/holo_orange_dark"
        android:text="="
        android:textColor="@android:color/background_light"
        android:textSize="36sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@id/btn3"
        app:layout_constraintTop_toBottomOf="@+id/btnTopla"
        app:layout_constraintVertical_bias="0.0"
        tools:ignore="MissingConstraints" />

    <Button
        android:id="@+id/btn1"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginStart="5dp"
        android:layout_marginLeft="5dp"
        android:background="?attr/colorBackgroundFloating"
        android:text="1"
        android:textSize="36sp"
        app:layout_constraintBottom_toTopOf="@+id/btn0"
        app:layout_constraintEnd_toStartOf="@+id/btn2"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/btn4"
        tools:ignore="MissingConstraints" />

    <Button
        android:id="@+id/btnTopla"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginEnd="5dp"
        android:layout_marginRight="5dp"
        android:background="@android:color/holo_orange_dark"
        android:text="+"
        android:textColor="@android:color/background_light"
        android:textSize="36sp"
        app:layout_constraintBottom_toTopOf="@+id/btnEsittir"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/btn3"
        app:layout_constraintTop_toBottomOf="@+id/btnCikar"
        tools:ignore="MissingConstraints" />

    <Button
        android:id="@+id/btn3"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="?attr/colorBackgroundFloating"
        android:text="3"
        android:textSize="36sp"
        app:layout_constraintBottom_toTopOf="@+id/btnVirgul"
        app:layout_constraintEnd_toStartOf="@+id/btnTopla"
        app:layout_constraintStart_toEndOf="@+id/btn2"
        app:layout_constraintTop_toBottomOf="@+id/btn6"
        tools:ignore="MissingConstraints" />

    <Button
        android:id="@+id/btn2"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="?attr/colorBackgroundFloating"
        android:text="2"
        android:textSize="36sp"
        app:layout_constraintBottom_toTopOf="@+id/btn0"
        app:layout_constraintEnd_toStartOf="@+id/btn3"
        app:layout_constraintStart_toEndOf="@+id/btn1"
        app:layout_constraintTop_toBottomOf="@+id/btn5"
        tools:ignore="MissingConstraints" />

    <Button
        android:id="@+id/btn4"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginStart="5dp"
        android:layout_marginLeft="5dp"
        android:background="?attr/colorBackgroundFloating"
        android:text="4"
        android:textSize="36sp"
        app:layout_constraintBottom_toTopOf="@+id/btn1"
        app:layout_constraintEnd_toStartOf="@+id/btn5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/btn7"
        tools:ignore="MissingConstraints" />

    <Button
        android:id="@+id/btn5"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="?attr/colorBackgroundFloating"
        android:text="5"
        android:textSize="36sp"
        app:layout_constraintBottom_toTopOf="@+id/btn2"
        app:layout_constraintEnd_toStartOf="@+id/btn6"
        app:layout_constraintStart_toEndOf="@+id/btn4"
        app:layout_constraintTop_toBottomOf="@+id/btn8"
        tools:ignore="MissingConstraints" />

    <Button
        android:id="@+id/btn6"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="?attr/colorBackgroundFloating"
        android:text="6"
        android:textSize="36sp"
        app:layout_constraintBottom_toTopOf="@+id/btn3"
        app:layout_constraintEnd_toStartOf="@+id/btnCikar"
        app:layout_constraintStart_toEndOf="@+id/btn5"
        app:layout_constraintTop_toBottomOf="@+id/btn9"
        tools:ignore="MissingConstraints" />

    <Button
        android:id="@+id/btnCikar"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginEnd="5dp"
        android:layout_marginRight="5dp"
        android:background="@android:color/holo_orange_dark"
        android:text="-"
        android:textColor="@android:color/background_light"
        android:textSize="36sp"
        app:layout_constraintBottom_toTopOf="@+id/btnTopla"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/btn6"
        app:layout_constraintTop_toBottomOf="@+id/btnCarp"
        tools:ignore="MissingConstraints" />

    <Button
        android:id="@+id/btn8"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="?attr/colorBackgroundFloating"
        android:text="8"
        android:textSize="36sp"
        app:layout_constraintBottom_toTopOf="@+id/btn5"
        app:layout_constraintEnd_toStartOf="@+id/btn9"
        app:layout_constraintStart_toEndOf="@+id/btn7"
        app:layout_constraintTop_toBottomOf="@+id/btnAdd"
        tools:ignore="MissingConstraints" />

    <Button
        android:id="@+id/btnCarp"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginEnd="5dp"
        android:layout_marginRight="5dp"
        android:background="@android:color/holo_orange_dark"
        android:text="\*"
        android:textColor="@android:color/background_light"
        android:textSize="36sp"
        app:layout_constraintBottom_toTopOf="@+id/btnCikar"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/btn9"
        app:layout_constraintTop_toBottomOf="@+id/btnBol"
        tools:ignore="MissingConstraints" />

    <Button
        android:id="@+id/btn9"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="?attr/colorBackgroundFloating"
        android:text="9"
        android:textSize="36sp"
        app:layout_constraintBottom_toTopOf="@+id/btn6"
        app:layout_constraintEnd_toStartOf="@+id/btnCarp"
        app:layout_constraintStart_toEndOf="@+id/btn8"
        app:layout_constraintTop_toBottomOf="@+id/btnYuzde"
        tools:ignore="MissingConstraints" />

    <Button
        android:id="@+id/buttonSifirla"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginStart="5dp"
        android:layout_marginLeft="5dp"
        android:layout_marginTop="5dp"
        android:background="?attr/colorButtonNormal"
        android:text="\AC"
        android:textSize="36sp"
        app:layout_constraintBottom_toTopOf="@+id/btn7"
        app:layout_constraintEnd_toStartOf="@+id/btnAdd"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/hesapEkrani"
        tools:ignore="MissingConstraints" />

    <Button
        android:id="@+id/btnAdd"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginTop="5dp"
        android:background="?attr/colorButtonNormal"
        android:text="\+/-"
        android:textSize="36sp"
        app:layout_constraintBottom_toTopOf="@+id/btn8"
        app:layout_constraintEnd_toStartOf="@+id/btnYuzde"
        app:layout_constraintStart_toEndOf="@+id/buttonSifirla"
        app:layout_constraintTop_toBottomOf="@+id/hesapEkrani"
        tools:ignore="MissingConstraints" />

    <Button
        android:id="@+id/btnBol"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginTop="5dp"
        android:layout_marginEnd="5dp"
        android:layout_marginRight="5dp"
        android:background="@android:color/holo_orange_dark"
        android:text="\/"
        android:textColor="@android:color/background_light"
        android:textSize="36sp"
        app:layout_constraintBottom_toTopOf="@+id/btnCarp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/btnYuzde"
        app:layout_constraintTop_toBottomOf="@+id/hesapEkrani"
        tools:ignore="MissingConstraints" />

    <Button
        android:id="@+id/btnYuzde"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginTop="5dp"
        android:background="?attr/colorButtonNormal"
        android:text="\%"
        android:textSize="36sp"
        app:layout_constraintBottom_toTopOf="@+id/btn9"
        app:layout_constraintEnd_toStartOf="@+id/btnBol"
        app:layout_constraintStart_toEndOf="@+id/btnAdd"
        app:layout_constraintTop_toBottomOf="@+id/hesapEkrani"
        tools:ignore="MissingConstraints" />

    <Button
        android:id="@+id/btn7"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginStart="5dp"
        android:layout_marginLeft="5dp"
        android:background="?attr/colorBackgroundFloating"
        android:text="7"
        android:textSize="36sp"
        app:layout_constraintBottom_toTopOf="@+id/btn4"
        app:layout_constraintEnd_toStartOf="@+id/btn8"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/buttonSifirla"
        tools:ignore="MissingConstraints" />

    <TextView
        android:id="@+id/hesapEkrani"
        android:layout_width="0dp"
        android:layout_height="200dp"
        android:layout_marginStart="5dp"
        android:layout_marginLeft="5dp"
        android:layout_marginTop="5dp"
        android:layout_marginEnd="5dp"
        android:layout_marginRight="5dp"
        android:fontFamily="sans-serif-light"
        android:gravity="center_vertical|right"
        android:padding="10dp"
        android:paddingLeft="10dp"
        android:paddingTop="10dp"
        android:paddingRight="10dp"
        android:paddingBottom="10dp"
        android:text="0"
        android:textColor="#FFFFFF"
        android:textColorHint="#FFFFFF"
        android:textSize="75sp"
        android:verticalScrollbarPosition="right"
        app:layout_constraintBottom_toTopOf="@+id/buttonSifirla"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:ignore="MissingConstraints" />

</androidx.constraintlayout.widget.ConstraintLayout>

Yukarıdaki kodları xml dosyasına yapıştırdıktan sonra aşağıdaki gibi bir şekil elde etmiş olacaksınız.

Şekil-6: Hazır Kodlar

Tasarım işlemleri bittikten sonra sıra hesap makinasının nasıl çalışması gerektiğini kodlamaya geldi. Bunu da ilk satırlarda söylediğim gibi MainActivity.java dosyası üzerinden yapacağız.

Button
            btn0,
            btn1,
            btn2,
            btn3,
            btn4,
            btn5,
            btn6,
            btn7,
            btn8,
            btn9,
            btnTopla,
            btnCikar,
            btnBol,
            btnCarp,
            btnEsittir,
            btnVirgul,
            btnSifirla;

    Double ilkSayi;
    TextView hesapEkrani;
    Boolean virgulDurum;
    String islemDurum;

Yukarıdaki sabit tanımlarımızı MainActivity sınıfının hemen altına yaptıktan sonra onCreate fonksiyonu ile aşağıdaki gibi oluşturuyoruz.

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        btn0 = findViewById(R.id.btn0);
        btn1 = findViewById(R.id.btn1);
        btn2 = findViewById(R.id.btn2);
        btn3 = findViewById(R.id.btn3);
        btn4 = findViewById(R.id.btn4);
        btn5 = findViewById(R.id.btn5);
        btn6 = findViewById(R.id.btn6);
        btn7 = findViewById(R.id.btn7);
        btn8 = findViewById(R.id.btn8);
        btn9 = findViewById(R.id.btn9);
        btnTopla = findViewById(R.id.btnTopla);
        btnCikar = findViewById(R.id.btnCikar);
        btnBol = findViewById(R.id.btnBol);
        btnCarp = findViewById(R.id.btnCarp);
        btnEsittir = findViewById(R.id.btnEsittir);
        btnSifirla = findViewById(R.id.buttonSifirla);
        btnVirgul = findViewById(R.id.btnVirgul);

        hesapEkrani = findViewById(R.id.hesapEkrani);

        hesapEkrani.setText("0");
        ilkSayi = 0.0;
        virgulDurum = false;
        islemDurum = "0";



        btnEsittir.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TIKLA_SEMBOL("=");
            }
        });
        btnTopla.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TIKLA_SEMBOL("+");
            }
        });
        btnCikar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TIKLA_SEMBOL("-");
            }
        });
        btnCarp.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TIKLA_SEMBOL("*");
            }
        });
        btnBol.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TIKLA_SEMBOL("/");
            }
        });
        btnSifirla.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TIKLA_SEMBOL("sifirla");
            }
        });
        btnVirgul.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TIKLA_SEMBOL(",");
            }
        });
        btn0.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TIKLA_NUMARA(0);
            }
        });
        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TIKLA_NUMARA(1);
            }
        });
        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TIKLA_NUMARA(2);
            }
        });
        btn3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TIKLA_NUMARA(3);
            }
        });
        btn4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TIKLA_NUMARA(4);
            }
        });
        btn5.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TIKLA_NUMARA(5);
            }
        });
        btn6.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TIKLA_NUMARA(6);
            }
        });
        btn7.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TIKLA_NUMARA(7);
            }
        });
        btn8.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TIKLA_NUMARA(8);
            }
        });
        btn9.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TIKLA_NUMARA(9);
            }
        });
    }

Ben kodlama yaparken sembol ve numara tıklamayı ayırıp ikisi için farklı fonksiyonlar yazdım ancak optimize edilmemiş bu kodlar optimize edilerek daha efektif kullanılabilir. Son olarak bu fonksiyonlar şöyleydi,

private void TIKLA_NUMARA(int sayi)
    {
        if(hesapEkrani.getText().toString() == "0"){
            hesapEkrani.setText("");
        }
        else if(
                hesapEkrani.getText().toString() == "+" ||
                        hesapEkrani.getText().toString() == "*" ||
                        hesapEkrani.getText().toString() == "/"||
                        hesapEkrani.getText().toString() == "-"        )
        {
            hesapEkrani.setText("");
        }
        hesapEkrani.setText(hesapEkrani.getText() + String.valueOf(sayi));
    }

Numaraya değilde bir sembole yani + – / * gibi operatörlere tıklandığı zaman ne yapması gerektiğini söyleyen fonksiyonda şu şekilde olacaktır,

private void TIKLA_SEMBOL(String sembol)
    {
        switch (sembol)
        {
            default:
            {
                if(hesapEkrani.getText().toString() == "+" || hesapEkrani.getText().toString() == "*"
                        || hesapEkrani.getText().toString() == "/" || hesapEkrani.getText().toString() == "-")
                {
                    if(islemDurum == "*" || islemDurum == "/")
                        ilkSayi = -1*ilkSayi;

                    hesapEkrani.setText(sembol);
                    islemDurum = sembol;
                }
                else
                {
                    ilkSayi = Double.parseDouble(hesapEkrani.getText().toString());
                    hesapEkrani.setText(sembol);
                    islemDurum = sembol;
                }
            }
            break;
            case "sifirla":
            {
                ilkSayi = 0.0;
                hesapEkrani.setText("0");
                islemDurum = "0";
            }
            break;
            case "=":
            {
                if(hesapEkrani.getText().toString() == "+" || hesapEkrani.getText().toString() == "*"
                        || hesapEkrani.getText().toString() == "/" || hesapEkrani.getText().toString() == "-")
                {

                }
                else
                {
                    switch (islemDurum)
                    {
                        default:
                        {
                            hesapEkrani.setText(ilkSayi.toString());
                        }
                        break;
                        case "+":
                        {
                            ilkSayi = ilkSayi + Double.parseDouble(hesapEkrani.getText().toString());
                            hesapEkrani.setText(ilkSayi.toString());
                        }
                        break;
                        case "-":
                        {
                            ilkSayi = ilkSayi - Double.parseDouble(hesapEkrani.getText().toString());
                            hesapEkrani.setText(ilkSayi.toString());
                        }
                        break;
                        case "/":
                        {
                            ilkSayi = ilkSayi / Double.parseDouble(hesapEkrani.getText().toString());
                            hesapEkrani.setText(ilkSayi.toString());
                        }
                        break;
                        case "*":
                        {
                            ilkSayi = ilkSayi * Double.parseDouble(hesapEkrani.getText().toString());
                            hesapEkrani.setText(ilkSayi.toString());
                        }
                        break;
                    }
                }


            }
            break;
            case ",":
            {

            }
            break;
        }
    }

Kolay gelsin 🙂

Comments

“Android Hesap Makinesi” için 5 yanıt
  1. Ertaç avatarı
    Ertaç

    Merhabalar main activty kod yazimi nasil olacak sirasi clikleri gormuyor

    1. admin avatarı

      Şekil-3 kısmında MainActivity kısmı var. Ancak aradığın kısım farklı ise tekrar sorabilirsin.

  2. Mehmet dalbaşı avatarı
    Mehmet dalbaşı

    Merhaba Sizinle iletişime geçmek istiyorum mail olarak geri dönüş yabailir misiniz

  3. Ziyaretçi avatarı
    Ziyaretçi

    Merhaba Activity sayfasında yüzde sembolü de var ama Java sayfasında ölçümü yapılmamış. Yapılacak mı acaba. Kolay gelsin

  4. Haşim Taha Tur avatarı

    merhaba bu hesap makinasını yapamadım hazır bir şekilde atabilirmisiniz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir