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

Mobile Vitals: A first step to Faster Apps

Slow startup times, UI hangs, and frozen frames frustrate users—but they’re also fixable. Mobile Vitals help you measure and understand these performance issues so you can optimize your app’s speed and responsiveness. Learn how to use them to reduce friction and improve user experience.

Read the guide

Top comments (0)

Billboard image

📊 A side-by-side product comparison between Sentry and Crashlytics

A free guide pointing out the differences between Sentry and Crashlytics, that’s it. See which is best for your mobile crash reporting needs.

See Comparison