Membuat Aplikasi Kalkulator Mobile Sederhana

Membuat Aplikasi Kalkulator Mobile Sederhana

Hi coder,
semoga semua sehat-sehat ya!
Kali ini saya akan coba iseng2 buat aplikasi yang paling mainstream sejagat raya. hehe

Ya aplikasi kalkulator sederhana cuy, biasanya aplikasi ini dibuat kalo ada tugas kuliah yang menyangkut dengan variabel numerik dan operasi variabel tersebut. Tapi kali ini kita buat versi androidnya, namanya Easy Calculator. Tapi buatnya sebenernya ga easy2 amat sih, ada beberapa kondisi yang harus diperhatikan.

Tanpa babi bu lagi, langsung aja kita gaskeun!

  1. Buat project baru di android studio
New Project Android Studio

Disini kita pakai empty, dengan bahasa pemrograman java.

2. Desain tampilan di xml

Tampilan

Tampilannya disini super sederhana cuy, ga macem2. 1 textview diatas untuk menampilkan input user, kemudian saya buat button sebanyak 16 buah dengan layout 4×4. Button ini saya gunakan untuk menampung inputan user berupa angka, clear dan operasi aritmatika. Kemudian terakhir saya tambahkan satu lagi textview untuk menampilkan hasil perhitungan calculator.

Code xml tampilan ada dibawah, bisa langsung dicopy:

<?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:orientation="vertical">



        <LinearLayout
            android:paddingTop="10dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:orientation="vertical">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:padding="20dp">

                <TextView
                    android:id="@+id/tvInput"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:gravity="end"
                    android:textSize="8pt"
                    android:hint="0"
                    android:textAlignment="textEnd"></TextView>
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">

                <Button
                    android:id="@+id/btn7"
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:layout_margin="5dp"
                    android:text="7" />

                <Button
                    android:id="@+id/btn8"
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:layout_margin="5dp"
                    android:text="8" />

                <Button
                    android:id="@+id/btn9"
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:layout_margin="5dp"
                    android:text="9" />

                <Button
                    android:textColor="@color/design_default_color_secondary"
                    android:id="@+id/btnDiv"
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:layout_margin="5dp"
                    android:text="/" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">

                <Button
                    android:id="@+id/btn4"
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:layout_margin="5dp"
                    android:text="4" />

                <Button
                    android:id="@+id/btn5"
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:layout_margin="5dp"
                    android:text="5" />

                <Button
                    android:id="@+id/btn6"
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:layout_margin="5dp"
                    android:text="6" />

                <Button
                    android:textColor="@color/design_default_color_secondary"
                    android:id="@+id/btnTime"
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:layout_margin="5dp"
                    android:text="X" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">

                <Button
                    android:id="@+id/btn1"
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:layout_margin="5dp"
                    android:text="1" />

                <Button
                    android:id="@+id/btn2"
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:layout_margin="5dp"
                    android:text="2" />

                <Button
                    android:id="@+id/btn3"
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:layout_margin="5dp"
                    android:text="3" />

                <Button
                    android:textColor="@color/design_default_color_secondary"
                    android:id="@+id/btnPlus"
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:layout_margin="5dp"
                    android:text="+" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">

                <Button
                    android:id="@+id/btn0"
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:layout_margin="5dp"
                    android:text="0" />

                <Button
                    android:textColor="@color/design_default_color_secondary"
                    android:id="@+id/btnClear"
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:layout_margin="5dp"
                    android:text="C" />

                <Button
                    android:textColor="@color/design_default_color_secondary"
                    android:id="@+id/btnResult"
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:layout_margin="5dp"
                    android:text="=" />

                <Button
                    android:textColor="@color/design_default_color_secondary"
                    android:id="@+id/btnSub"
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:layout_margin="5dp"
                    android:text="-" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:padding="20dp">

                <TextView
                    android:id="@+id/tvResult"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:gravity="end"
                    android:textStyle="bold"
                    android:textSize="10pt"
                    android:hint="0"
                    android:textAlignment="textEnd"></TextView>
            </LinearLayout>
        </LinearLayout>



    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

3. Coding controller untuk tampilan dan proses perhitungan

Karena disini aplikasi yang sederhana, saya membuat semua fungsi di 1 java saja. Saya menggunakan MainActivity.java sebagai controller dan perhitungan kalkulatornya.

Untuk flow aplikasi ini sendiri sangat sederhana, seperti ini

a. user klik tombol angka pertama, kemudian ditampilkan di textview input
b. user memilih operasi, kemudian ditampilkan di textview input
c. user input angka kedua dengan klik button angka, kemudian ditampilkan di textview input
d. kemudian untuk mendapatkan hasil, user klik button “=”
e. app kemudian melakukan validasi input user, seperti angka 1, operator dan angka 2 tidak boleh kosong.
f. dengan melihat variabel operator, app akan melakukan perhitungan sesuai dengan operator input user.
g. khusus untuk pembagian akan dilakukan perubahan type variabel ke double agar app dapat menampilkan bilangan desimal.
h. jika sudah didapat hasil operasi kemudian akan ditampilkan pada textview hasil pada bagian bawah.
i. terakhir, user dapat menghapus semua input dan hasil operasi dengan klik tombol “c”

Untuk code dari controller dapat dilihat dan dicopy dibawah ini.

package com.codebaik.easycalculator;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    int intResult;
    String valueString1, valueString2;
    double[] doubleResult = new double[10];
    String operator;
    Button btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, btn0, btnPlus, btnSub, btnTime, btnDiv, btnResult, btnClear;
    TextView tvInput, tvResult;

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


        // initiate
        valueString1 = "";
        valueString2 = "";

// assign
        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);
        btnPlus = findViewById(R.id.btnPlus);
        btnSub = findViewById(R.id.btnSub);
        btnTime = findViewById(R.id.btnTime);
        btnDiv = findViewById(R.id.btnDiv);
        btnResult = findViewById(R.id.btnResult);
        btnClear = findViewById(R.id.btnClear);
        tvInput = findViewById(R.id.tvInput);
        tvResult = findViewById(R.id.tvResult);

//        onClickListener
        btn0.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (!tvInput.getText().equals("0") && !tvInput.getText().equals("")) {
                    addValue("0");
                    tvInput.append("0");
                }
            }
        });

        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                addValue("1");
                tvInput.append("1");
            }
        });
        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                addValue("2");
                tvInput.append("2");
            }
        });
        btn3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                addValue("3");
                tvInput.append("3");
            }
        });
        btn4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                addValue("4");
                tvInput.append("4");
            }
        });
        btn5.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                addValue("5");
                tvInput.append("5");
            }
        });
        btn6.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                addValue("6");
                tvInput.append("6");
            }
        });
        btn7.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                addValue("7");
                tvInput.append("7");
            }
        });
        btn8.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                addValue("8");
                tvInput.append("8");
            }
        });
        btn9.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                addValue("9");
                tvInput.append("9");
            }
        });

        btnPlus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                operator("+");
            }
        });
        btnSub.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                operator("-");
            }
        });
        btnTime.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                operator("x");
            }
        });
        btnDiv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                operator("/");
            }
        });
        btnResult.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (valueString1==null || operator==null || valueString2==null) {
                    Toast.makeText(MainActivity.this, "empty input", Toast.LENGTH_SHORT).show();
                } else {
                    hitung();
                }
            }
        });
        btnClear.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                clearAll();
            }
        });
    }

    void operator(String opt) {
        if (operator == null) {
            operator = opt;
            tvInput.append(" " + opt + " ");
        }

    }

    void clearAll() {
        valueString1 = "";
        valueString2 = "";
        operator = null;
        intResult = 0;
        doubleResult = new double[10];
        tvInput.setText("");
        tvResult.setText("");
    }

    void addValue(String numb) {
        if (!tvResult.getText().equals("")) {
            clearAll();

        }
        if (operator == null) {
            valueString1 += numb;
        } else {
            valueString2 += numb;
        }

    }

    void hitung() {
        System.out.println("hitung : " + valueString1 + operator + valueString2);

        intResult = 0;

        //validate
        if (!valueString1.equals("") && !operator.equals("") && !valueString2.equals("")) {
            if (operator.equals("+")) {
                intResult = Integer.parseInt(valueString1) + Integer.parseInt(valueString2);
            } else if (operator.equals("-")) {
                intResult = Integer.parseInt(valueString1) - Integer.parseInt(valueString2);
            } else if (operator.equals("x")) {
                intResult = Integer.parseInt(valueString1) * Integer.parseInt(valueString2);
            } else if (operator.equals("/")) {
                doubleResult[0] = (double) Integer.parseInt(valueString1) / Integer.parseInt(valueString2);
            }
        }

        if (intResult != 0) {
            tvResult.setText(String.valueOf(intResult));
        } else {
            tvResult.setText(Double.toString(doubleResult[0]));
        }
    }

}

Nah, sudah jadi deh aplikasi kalkulator sederhana, Easy Calculator. Buat temen2 yang dapat tugas kuliah membuat aplikasi seperti ini boleh dipelajari dan digunakan codenya.


Kalau mau checkout projectnya, dibawah ini ada link GitHub nya.

Semoga bermanfaat skoy!

ngurah.anggawijaya

Related Posts

Understanding Git: A Comprehensive Guide for Beginners

Understanding Git: A Comprehensive Guide for Beginners

Menggunakan Database Local SQLite pada Aplikasi Android

Menggunakan Database Local SQLite pada Aplikasi Android

Mengkoneksikan Firebase FCM dengan Aplikasi Android

Mengkoneksikan Firebase FCM dengan Aplikasi Android

Cara Mengirim Notifikasi dengan Firebase FCM

Cara Mengirim Notifikasi dengan Firebase FCM

1 Comment

Leave a Reply

Your email address will not be published. Required fields are marked *