DEV Community

Leo
Leo

Posted on

MyCalqlator - Kotlin / Android Studio

Here we have my first Calculator in Android Studio

Start Layout

Image description

Suma

Image description

Resultado

Image description

Code backup

buttons_layouut.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <GridLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:columnCount="4"
        android:rowCount="5">

        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:layout_row="0"
            android:layout_column="0"
            android:layout_columnWeight="1"
            android:layout_margin="3dp"

            android:backgroundTint="#DCB3B3"
            android:onClick="borrar"
            android:text="CA"
            android:textColor="#5D0202"
            android:textSize="34sp"
            app:strokeColor="#5D0202"
            app:strokeWidth="2px" />

        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:layout_row="0"
            android:layout_column="1"
            android:layout_columnWeight="1"
            android:layout_margin="3dp"

            android:backgroundTint="#DCB3B3"
            android:onClick="borrar"
            android:text="C"
            android:textColor="#5D0202"
            android:textSize="34sp"
            app:strokeColor="#5D0202"
            app:strokeWidth="2px" />

        <Button
            android:id="@+id/button3"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:layout_row="0"
            android:layout_column="2"
            android:layout_columnWeight="1"
            android:layout_margin="3dp"

            android:backgroundTint="#DCB3B3"
            android:onClick="cambiarOperador"
            android:text="%"
            android:textColor="#5D0202"
            android:textSize="34sp"
            app:strokeColor="#5D0202"
            app:strokeWidth="2px" />

        <Button
            android:id="@+id/button4"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:layout_row="0"
            android:layout_column="3"
            android:layout_columnWeight="1"
            android:layout_margin="3dp"

            android:backgroundTint="#5D0202"
            android:onClick="cambiarOperador"
            android:text="÷"
            android:textSize="34sp" />

        <Button
            android:id="@+id/button5"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:layout_row="1"
            android:layout_column="0"
            android:layout_columnWeight="1"
            android:layout_margin="3dp"
            android:backgroundTint="@color/white"

            android:onClick="selectNumbers"
            android:text="7"
            android:textColor="#5D0202"
            android:textSize="34sp"
            app:strokeColor="#5D0202"
            app:strokeWidth="2dp" />

        <Button
            android:id="@+id/button6"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:layout_row="1"
            android:layout_column="1"
            android:layout_columnWeight="1"
            android:layout_margin="3dp"
            android:backgroundTint="@color/white"

            android:onClick="selectNumbers"
            android:text="8"
            android:textColor="#5D0202"
            android:textSize="34sp"
            app:strokeColor="#5D0202"
            app:strokeWidth="2dp" />

        <Button
            android:id="@+id/button7"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:layout_row="1"
            android:layout_column="2"
            android:layout_columnWeight="1"
            android:layout_margin="3dp"
            android:backgroundTint="@color/white"

            android:onClick="selectNumbers"
            android:text="9"
            android:textColor="#5D0202"
            android:textSize="34sp"
            app:strokeColor="#5D0202"
            app:strokeWidth="2dp" />

        <Button
            android:id="@+id/button8"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:layout_row="1"
            android:layout_column="3"
            android:layout_columnWeight="1"
            android:layout_margin="3dp"
            android:backgroundTint="#5D0202"

            android:onClick="cambiarOperador"
            android:text="x"
            android:textColor="@color/white"
            android:textSize="34sp"
            app:strokeColor="#5D0202"
            app:strokeWidth="2dp" />

        <Button
            android:id="@+id/button9"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:layout_row="2"
            android:layout_column="0"
            android:layout_columnWeight="1"
            android:layout_margin="3dp"
            android:backgroundTint="@color/white"

            android:onClick="selectNumbers"
            android:text="4"
            android:textColor="#5D0202"
            android:textSize="34sp"
            app:strokeColor="#5D0202"
            app:strokeWidth="2dp" />

        <Button
            android:id="@+id/button10"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:layout_row="2"
            android:layout_column="1"
            android:layout_columnWeight="1"
            android:layout_margin="3dp"
            android:backgroundTint="@color/white"

            android:onClick="selectNumbers"
            android:text="5"
            android:textColor="#5D0202"
            android:textSize="34sp"
            app:strokeColor="#5D0202"
            app:strokeWidth="2dp" />

        <Button
            android:id="@+id/button11"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:layout_row="2"
            android:layout_column="2"
            android:layout_columnWeight="1"
            android:layout_margin="3dp"
            android:backgroundTint="@color/white"

            android:onClick="selectNumbers"
            android:text="6"
            android:textColor="#5D0202"
            android:textSize="34sp"
            app:strokeColor="#5D0202"
            app:strokeWidth="2dp" />

        <Button
            android:id="@+id/button12"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:layout_row="2"
            android:layout_column="3"
            android:layout_columnWeight="1"
            android:layout_margin="3dp"
            android:backgroundTint="#5D0202"

            android:onClick="cambiarOperador"
            android:text="-"
            android:textColor="@color/white"
            android:textSize="34sp"
            app:strokeColor="#5D0202"
            app:strokeWidth="2dp" />

        <Button
            android:id="@+id/button13"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:layout_row="3"
            android:layout_column="0"
            android:layout_columnWeight="1"
            android:layout_margin="3dp"
            android:backgroundTint="@color/white"

            android:onClick="selectNumbers"
            android:text="1"
            android:textColor="#5D0202"
            android:textSize="34sp"
            app:strokeColor="#5D0202"
            app:strokeWidth="2dp" />

        <Button
            android:id="@+id/button14"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:layout_row="3"
            android:layout_column="1"
            android:layout_columnWeight="1"
            android:layout_margin="3dp"
            android:backgroundTint="@color/white"

            android:onClick="selectNumbers"
            android:text="2"
            android:textColor="#5D0202"
            android:textSize="34sp"
            app:strokeColor="#5D0202"
            app:strokeWidth="2dp" />

        <Button
            android:id="@+id/button15"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:layout_row="3"
            android:layout_column="2"
            android:layout_columnWeight="1"
            android:layout_margin="3dp"
            android:backgroundTint="@color/white"

            android:onClick="selectNumbers"
            android:text="3"
            android:textColor="#5D0202"
            android:textSize="34sp"
            app:strokeColor="#5D0202"
            app:strokeWidth="2dp" />

        <Button
            android:id="@+id/button16"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:layout_row="3"
            android:layout_column="3"
            android:layout_columnWeight="1"
            android:layout_margin="3dp"
            android:backgroundTint="#5D0202"

            android:onClick="cambiarOperador"
            android:text="+"
            android:textColor="@color/white"
            android:textSize="34sp"
            app:strokeColor="#5D0202"
            app:strokeWidth="2dp" />

        <Button
            android:id="@+id/button17"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:layout_row="4"
            android:layout_column="0"
            android:layout_columnSpan="2"
            android:layout_columnWeight="1"
            android:layout_margin="3dp"

            android:backgroundTint="@color/white"
            android:onClick="selectNumbers"
            android:text="0"
            android:textAlignment="viewStart"
            android:textColor="#5D0202"
            android:textSize="34sp"
            app:strokeColor="#5D0202"
            app:strokeWidth="2dp" />

        <Button
            android:id="@+id/button18"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:layout_row="4"
            android:layout_column="2"
            android:layout_columnWeight="1"
            android:layout_margin="3dp"
            android:backgroundTint="@color/white"

            android:onClick="selectNumbers"
            android:text="."
            android:textColor="#5D0202"
            android:textSize="34sp"
            app:strokeColor="#5D0202"
            app:strokeWidth="2dp" />

        <Button
            android:id="@+id/button20"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:layout_row="4"
            android:layout_column="3"
            android:layout_columnWeight="1"
            android:layout_margin="3dp"

            android:backgroundTint="#5D0202"
            android:onClick="igual"
            android:text="="
            android:textColor="@color/white"
            android:textSize="34sp"
            app:strokeColor="#5D0202"
            app:strokeWidth="2dp" />

    </GridLayout>
</LinearLayout>
Enter fullscreen mode Exit fullscreen mode

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/txtTemp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:textAlignment="textEnd"
        android:textColor="#7B090000"
        android:textSize="34dp" />

    <TextView
        android:id="@+id/txtResult"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:textAlignment="textEnd"
        android:textSize="60sp" />

    <include
        layout="@layout/buttons_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>
Enter fullscreen mode Exit fullscreen mode

MainActivity.kt

package com.example.mycalqlator

import android.icu.text.DecimalFormat
import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.TextView
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat

class MainActivity : AppCompatActivity() {

    val SUMA = "+"
    val RESTA = "-"
    val MULTIPLICACION = "*"
    val DIVISION = "/"
    val PORCENTAJE = "%"

    var OpActual = ""

    var primerNumero:Double = Double.NaN
    var segundoNumero:Double = Double.NaN

    lateinit var txtTemp:TextView
    lateinit var txtResult:TextView

    lateinit var formatoDecimal: DecimalFormat

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContentView(R.layout.activity_main)
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }

        formatoDecimal = DecimalFormat("#.#########")
        txtTemp = findViewById(R.id.txtTemp)
        txtResult = findViewById(R.id.txtResult)
    }

    fun cambiarOperador(b: View){
        if(txtTemp.text.isNotEmpty() || primerNumero.toString()!="NaN") {
            calqlar()
            val boton: Button = b as Button
            if (boton.text.toString().trim() == "÷") {
                OpActual = "/"
            } else if (boton.text.toString().trim() == "x") {
                OpActual = "*"
            } else {
                OpActual = boton.text.toString().trim()
            }
            txtResult.text = formatoDecimal.format(primerNumero) + OpActual
            txtTemp.text = ""
        }
    }

    fun calqlar(){
        try {
            if (primerNumero.toString() != "NaN") {
                if (txtTemp.text.toString().isEmpty()) {
                    txtTemp.text = txtResult.text.toString()
                }
                segundoNumero = txtTemp.text.toString().toDouble()
                txtTemp.text = ""

                when (OpActual) {
                    "+" -> primerNumero = (primerNumero + segundoNumero)
                    "-" -> primerNumero = (primerNumero - segundoNumero)
                    "*" -> primerNumero = (primerNumero * segundoNumero)
                    "/" -> primerNumero = (primerNumero / segundoNumero)
                    "%" -> primerNumero = (primerNumero % segundoNumero)
                }
            } else {
                primerNumero = txtTemp.text.toString().toDouble()
            }
        }catch (e:Exception){

        }
    }

    fun selectNumbers(b: View) {
        val boton: Button = b as Button
        val buttonText = boton.text.toString()
        val currentText = txtTemp.text.toString()

        when {
            buttonText == "." -> {
                if (currentText.contains(".")) return
                txtTemp.text = if (currentText.isEmpty()) "0." else currentText + "."
            }
            currentText == "0" -> {
                if (buttonText != "0") {
                    txtTemp.text = buttonText
                }
            }
            else -> {
                txtTemp.text = currentText + buttonText
            }
        }
    }


    fun igual(b: View){
        calqlar()
        txtResult.text = formatoDecimal.format(primerNumero)
        OpActual = ""
    }

    fun borrar(b:View){
        val boton:Button = b as Button
        if(boton.text.toString().trim()=="C"){
            if(txtTemp.text.toString().isNotEmpty()){
                var datosActuales:CharSequence = txtTemp.text as CharSequence
                txtTemp.text = datosActuales.subSequence(0, datosActuales.length - 1)

            }else{
                primerNumero = Double.NaN
                segundoNumero = Double.NaN
                txtTemp.text = ""
                txtResult.text = ""
            }
        }else if(boton.text.toString().trim() == "CA"){
            primerNumero = Double.NaN
            segundoNumero = Double.NaN
            txtTemp.text = ""
            txtResult.text = ""
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Sentry mobile image

Improving mobile performance, from slow screens to app start time

Based on our experience working with thousands of mobile developer teams, we developed a mobile monitoring maturity curve.

Read more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Explore a sea of insights with this enlightening post, highly esteemed within the nurturing DEV Community. Coders of all stripes are invited to participate and contribute to our shared knowledge.

Expressing gratitude with a simple "thank you" can make a big impact. Leave your thanks in the comments!

On DEV, exchanging ideas smooths our way and strengthens our community bonds. Found this useful? A quick note of thanks to the author can mean a lot.

Okay