¿Cómo funciona la creación de una calculadora de propinas en Kotlin?

¿Cómo funciona la creación de una calculadora de propinas en Kotlin?

Te mostramos cómo crear una aplicación simple para calcular propinas en el lenguaje Kotlin. Más específicamente, en Kotlin 1.3.21, Android 4 y Android Studio 3. Este artículo será interesante, sobre todo, para aquellos que comienzan su camino en el desarrollo de aplicaciones Android. Permite entender qué y cómo funciona dentro de la aplicación.

Esta calculadora será útil cuando necesites calcular la suma de propinas para un grupo que ha decidido pasar tiempo en un restaurante o café. Por supuesto, no todos y no siempre dejan propina a los camareros, es más una tradición occidental, pero el proceso de desarrollo de dicha aplicación es interesante de todos modos.

Recordamos: para todos los lectores de «Habr» — un descuento de 10,000 rublos al registrarse en cualquier curso de Skillbox usando el código promocional «Habr».

Skillbox recomienda: Curso práctico «Desarrollador móvil PRO.

Así es como se ve la aplicación en funcionamiento:

¿Cómo funciona la creación de una calculadora de propinas en Kotlin?

Ingresas el porcentaje deseado de la suma total, el número de participantes en la reunión y obtienes el resultado: la cantidad de propina a dejar.

Empezamos

La interfaz completa de la aplicación se ve de la siguiente manera:
¿Cómo funciona la creación de una calculadora de propinas en Kotlin?

¿Cómo funciona la creación de una calculadora de propinas en Kotlin?

La primera acción es cargar la base del proyecto. La abrimos en Android Studio 3.0 o una versión más reciente. Compilamos y ejecutamos el proyecto y vemos una pantalla blanca. Todo está bien, así debe ser.

¿Cómo funciona la creación de una calculadora de propinas en Kotlin?

¿Cómo funciona la creación de una calculadora de propinas en Kotlin?

Las acciones del usuario están escritas en el proyecto en orden cronológico para que todo sea claro. Para verlas, abrimos Ver -> Ventanas de herramientas -> TODO.

Exploramos el proyecto y abrimos colors.xml para evaluar la paleta de colores. En strings.xml se encuentran los datos de texto (etiquetas), y en styles.xml hay varias plantillas de fuentes.

Desarrollo de la sección de gastos

Abrimos activity_main.xml y agregamos el siguiente código en LinearLayout (#1):

Ahora se puede ajustar el estilo del directorio values o jugar con los colores utilizando la herramienta material.io.

Así es como se ve el proyecto ahora:

¿Cómo funciona la creación de una calculadora de propinas en Kotlin?
Como puedes ver, el cálculo de gastos se realiza en base a los datos introducidos por el usuario.

Desarrollo de la sección de cuentas

Agregamos el código a continuación en LinearLayout después de la Sección de Gastos (#2):

<! — TODO #3: Build Bill Section →
 
…

Cerramos el LinearLayout después de la lista de tareas pendientes y luego añadimos nuevo código, colocándolo dentro de LinearLayout (#3):

Dado que la principal tarea de la aplicación es calcular los gastos individuales de cada uno de los participantes en la cena, el Texto costPerPersonTextView tiene una gran importancia.

EditText limita la entrada de datos a una línea; este parámetro debe tener el valor NumberDecimal inputType.

¿Cómo funciona la creación de una calculadora de propinas en Kotlin?
Iniciamos el proyecto para probar y ingresamos los parámetros de daño total (tazas, platos rotos, etc.)

Desarrollo de la sección 'Personas y Propinas'

Para agregar la opción de elegir el monto de la propina, insertamos el siguiente código en la nueva sección LinearLayout (#4):

Este fragmento de código es necesario para calcular con precisión la cantidad de propina. El valor predeterminado del texto es 20. Los ImageButtons están equipados con íconos en la carpeta con permisos de escritura.

Copiamos completamente la sección y añadimos lo siguiente (#5):

  • IDs de ImageButton (subtractPeopleButton, addPeopleButton)
  • IDs de TextView (numberOfPeopleStaticText, numberOfPeopleTextView)
  • DefaultText para numberOfPeopleTextView (debe ser 4).

¿Cómo funciona la creación de una calculadora de propinas en Kotlin?

Ahora, al iniciar la aplicación, hay una opción para agregar la cantidad de la cuenta; también funcionan los botones 'Agregar/Substraer', pero por ahora no sucede nada.

Añadimos Views

Abrimos MainActivity.kt y añadimos esto en la función initViews (#6):

private fun initViews() {
        expensePerPersonTextView = findViewById(R.id.expensePerPersonTextView)
        billEditText = findViewById(R.id.billEditText)
 
addTipButton = findViewById(R.id.addTipButton)
        tipTextView = findViewById(R.id.tipTextView)
        subtractTipButton = findViewById(R.id.subtractTipButton)
 
addPeopleButton = findViewById(R.id.addPeopleButton)
        numberOfPeopleTextView = findViewById(R.id.numberOfPeopleTextView)
        subtractPeopleButton = findViewById(R.id.subtractPeopleButton)
 
//TODO #8: Bind Buttons to Listener
 
//TODO #16: Bind EditText to TextWatcher
 
}

Terminamos los botones

Para agregar soporte para los clics de botones, implementamos View.OnClickListener a nivel de clase (#7):

class MainActivity: AppCompatActivity(), View.OnClickListener {

No se podrá compilar el proyecto ahora, es necesario realizar algunas acciones adicionales (#8):

override fun onClick(v: View?) {
        when (v?.id) {
            R.id.addTipButton -> incrementTip()
            R.id.subtractTipButton -> decrementTip()
            R.id.addPeopleButton -> incrementPeople()
            R.id.subtractPeopleButton -> decrementPeople()
        }
    }

En cuanto a los botones y switches, todo está muy bien organizado en Kotlin. Agregamos el código a continuación en todas las funciones de incremento y decremento
(#9 –#12):

private fun incrementTip() {
        if (tipPercent != MAX_TIP) {
            tipPercent += TIP_INCREMENT_PERCENT
            tipTextView.text = String.format("%d%%", tipPercent)
        }
    }
 
private fun decrementTip() {
        if (tipPercent != MIN_TIP) {
            tipPercent -= TIP_INCREMENT_PERCENT
            tipTextView.text = String.format("%d%%", tipPercent)
        }
    }
 
private fun incrementPeople() {
        if (numberOfPeople != MAX_PEOPLE) {
            numberOfPeople += PEOPLE_INCREMENT_VALUE
            numberOfPeopleTextView.text = numberOfPeople.toString()
        }
    }
 
private fun decrementPeople() {
        if (numberOfPeople != MIN_PEOPLE) {
            numberOfPeople -= PEOPLE_INCREMENT_VALUE
            numberOfPeopleTextView.text = numberOfPeople.toString()
        }
    }

Aquí el código protege las funciones de incremento con valores máximos (MAX_TIP & MAX_PEOPLE). Además, el código protege las funciones de decremento con valores mínimos (MIN_TIP & MIN_PEOPLE).

Ahora vinculamos los botones a los listeners en la función initViews (#13):

private fun initViews() {
 
...
 
addTipButton.setOnClickListener(this)
        subtractTipButton.setOnClickListener(this)
 
addPeopleButton.setOnClickListener(this)
        subtractPeopleButton.setOnClickListener(this)
 
//TODO #15: Bind EditText to TextWatcher
}

¿Cómo funciona la creación de una calculadora de propinas en Kotlin?

Ahora se pueden agregar los gastos totales, las propinas y el número de participantes en la reunión. Y ahora lo más importante…

Sección de cálculo de gastos

Este código calcula los gastos (#14):

private fun calculateExpense() {
 
val totalBill = billEditText.text.toString().toDouble()
 
val totalExpense = ((HUNDRED_PERCENT + tipPercent) / HUNDRED_PERCENT) * totalBill
        val individualExpense = totalExpense / numberOfPeople
 
expensePerPersonTextView.text = String.format("$%.2f", individualExpense)
 
}

Y aquí se llama a la función que permite tener en cuenta el número de personas en la compañía y calcular las propinas (#15):

private fun incrementTip() {
 
…
 
}
 
private fun decrementTip() {
 
…
 
}
 
private fun incrementPeople() {
 
…
 
}
 
private fun decrementPeople() {
 
…
 
}

Estamos lanzando la aplicación. Se ve y funciona genial. Pero puede ser mejor.

Si intentas eliminar la cantidad de la cuenta y luego aumentar el número de propinas o amigos, la aplicación se caerá, ya que aún no hay una verificación para valores de costos nulos. Además, si intentas cambiar la cantidad de la cuenta, los gastos no se actualizarán.

Pasos finales

Agregamos TextWatcher (#16):

class MainActivity: AppCompatActivity(), View.OnClickListener, TextWatcher {

Luego embebemos el listener billEditText (#17):

billEditText.addTextChangedListener(this)

Además, añadimos código para ejecutar TextWatcher (#18):

override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
        if (!billEditText.text.isEmpty()) {
            calculateExpense()
        }
    }
override fun afterTextChanged(s: Editable?) {}

    override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}

¿Cómo funciona la creación de una calculadora de propinas en Kotlin?

¡Ahora todo funciona perfectamente! Felicitaciones, has escrito tu propio 'Calculador de propinas' en Kotlin.

¿Cómo funciona la creación de una calculadora de propinas en Kotlin?

Skillbox recomienda:

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster