Crear unha calculadora de propinas en Kotlin: como funciona?
Contámosche como crear unha aplicación sinxela para calcular consellos en Kotlin. Máis precisamente, Kotlin 1.3.21, Android 4, Android Studio 3. O artigo será interesante, en primeiro lugar, para aqueles que están comezando a súa andaina no desenvolvemento de aplicacións para Android. Permítelle comprender que e como funciona dentro da aplicación.
Esta calculadora será útil cando necesites calcular a cantidade de propinas dunha empresa que decide pasar o tempo nun restaurante ou cafetería. Por suposto, non todos deixan sempre unha propina aos camareiros, é máis unha tradición occidental, pero o proceso de desenvolvemento desta aplicación é interesante en calquera caso.
Recordámolo:para todos os lectores de "Habr" - un desconto de 10 rublos ao inscribirse en calquera curso de Skillbox usando o código promocional "Habr".
Introduza a porcentaxe desexada do importe total, o número de participantes na reunión e obtén o resultado: a cantidade de propina que debe deixar.
Comezando
A interface da aplicación completa ten o seguinte aspecto:
primeira acción - descargando a base do proxecto. Ábreo en Android Studio 3.0 ou posterior. Construímos e lanzamos o proxecto e vemos unha pantalla branca. Todo está ben, así debe ser.
As accións do usuario están escritas no proxecto en orde cronolóxica para que todo sexa claro. Para velo, abra Ver -> Ferramenta Windows -> TODO.
Estudamos o proxecto e abrimos colors.xml para avaliar a paleta de cores. strings.xml contén datos de texto (sinaturas) e styles.xml contén varios modelos de fontes.
Desenvolvemento da sección de custos
Abre activity_main.xml e engade o seguinte código ao LinearLayout (nº 1):
Dado que a tarefa principal da aplicación é calcular os custos individuais para cada participante nunha reunión de restaurante, costPersonTextView xoga o papel principal.
EditText limita a entrada a unha liña, este parámetro debe establecerse en NumberDecimal inputType.
Lanzamos o proxecto para a proba e introducimos os parámetros de danos xerais (vasos, pratos rotos, etc.)
Desenvolvemento da sección “Persoas e Consellos”.
Para engadir unha selección de volume de consellos, pega o seguinte código na nova sección LinearLayout (n.º 4):
Esta sección do código é necesaria para calcular con precisión a cantidade de propina. O valor de texto predeterminado é 20. Os ImageButtons proporciónanse con iconas nun cartafol con permisos de escritura.
Copia a sección por completo e engade o seguinte (#5):
ID de ImageButton (restar PeopleButton, addPeopleButton)
IDs de TextView (número de texto estático de persoas, texto de vista de número de persoas)
DefaultText para numberOfPeopleTextView (debe ser 4).
Agora, cando inicias a aplicación, hai a oportunidade de engadir o importe da factura, os botóns "Engadir/Restar" tamén funcionan, pero aínda non pasa nada.
Engadindo vistas
Abre MainActivity.kt e engade isto á función initViews (n.º 6):
En canto a botóns e interruptores, Kotlin organiza todo moi ben! Engade o código a continuación a todas as funcións de incremento e 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í o código protexe as funcións de incremento cos valores máximos (MAX_TIP e MAX_PEOPLE). Ademais, o código protexe as funcións de decremento con valores mínimos (MIN_TIP e MIN_PEOPLE).
Agora asociamos os botóns cos oíntes na 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
}
Agora podes engadir danos totais, consellos e o número de participantes na reunión. Pois agora o máis importante...
Sección de cálculo de custos
Este código calcula os custos (#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)
}
Pois ben, aquí chámase unha función que permite ter en conta o número de persoas na empresa e calcular consellos (#15):
private fun incrementTip() {
…
}
private fun decrementTip() {
…
}
private fun incrementPeople() {
…
}
private fun decrementPeople() {
…
}
Imos lanzar a aplicación. Parece e funciona moi ben. Pero podería ser mellor.
Se tentas eliminar o importe da factura e despois aumentas o número de propinas ou amigos, a aplicación fallará porque aínda non hai comprobación do valor de custo cero. Ademais, se tentas cambiar o importe da factura, os cargos non se actualizarán.