Ejercicio: Contador de cafés en Kotlin
Ejemplo sobre la interfaz de usuario
Interfaz de usuario (punto 6 de la unidad 2 en HLC)
Aplicación que permite programar una pausa en minutos para tomar un café y cuando termina cuenta los cafés tomados diariamente.
Lanza un contador descendente hasta un tiempo (en milisegundos) en el futuro, con notificaciones regulares cada cierto intervalo de tiempo (en milisegundos).
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:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="16dp">
<TextView
android:id="@+id/textView"
android:layout_width="181dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/cafes"
android:textAppearance="@style/TextAppearance.AppCompat.Large" />
<TextView
android:id="@+id/cuenta"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/cero"
android:textAlignment="center"
android:textAppearance="@style/TextAppearance.AppCompat.Large" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="163dp"
android:layout_margin="16dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<Button
android:id="@+id/botonMenos"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/menos" />
<TextView
android:id="@+id/tiempo"
android:layout_width="171dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/cinco"
android:textAlignment="center"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
android:textColor="#14B2A3"
android:textColorLink="#2196F3"
android:textStyle="bold" />
<Button
android:id="@+id/botonMas"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/mas" />
</LinearLayout>
<Button
android:id="@+id/botonComenzar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:text="@string/comenzar" />
</LinearLayout>
strings.xml
<resources>
<string name="app_name">Contador</string>
<string name="cafes">Cafés</string>
<string name="cero">0</string>
<string name="menos">-</string>
<string name="cinco">5:00</string>
<string name="mas">+</string>
<string name="comenzar">Comenzar</string>
</resources>
Clase CountDownTimer
Ejemplo de uso:
inner class MyCountDownTimer(millisInFuture: Long, countDownInterval: Long : CountDownTimer(millisInFuture, countDownInterval) {
override fun onTick(millisUntilFinished: Long) {
// actualizar el tiempo en la etiqueta
}
override fun onFinish() {
texto.setText("Pausa terminada!!")
// acciones al finalizar el contador descendente
}
}
contadorDescendente = MyCountDownTimer((contador.obtenerTiempo() * 60 * 1000).toLong(), 1000)
contadorDescendente.start()
en el fichero build.gradle se deben añadir estas líneas:
buildFeatures {
viewBinding = true
}
Contador.kt
class Contador {
private val DESCANSO = 5
private var cafes: Int//número de cafés
private var tiempo: Int // tiempo de la pausa en minutos
constructor() {
cafes = 0
tiempo = DESCANSO
}
constructor(c: Int, t: Int) {
cafes = c
tiempo = t
}
fun aumentarTiempo(): String {
tiempo += 1
return tiempo.toString() + ":00"
}
fun disminuirTiempo(): String {
tiempo -= 1
if (tiempo < 1) tiempo = 1
return tiempo.toString() + ":00"
}
fun obtenerTiempo(): Int {
return tiempo
}
fun aumentarCafes(): String {
cafes += 1
return cafes.toString()
}
}
MainActivity.kt
class MainActivity : AppCompatActivity(), View.OnClickListener {
private lateinit var binding: ActivityMainBinding
private lateinit var contador: Contador
private lateinit var contadorDescendente: MyCountDownTimer
private val PAUSA = 3
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// setContentView(R.layout.activity_main)
binding = ActivityMainBinding.inflate(layoutInflater)
val view: View = binding.root
setContentView(view)
}
override fun onClick(view: View) {
}
inner class MyCountDownTimer(millisInFuture: Long, countDownInterval: Long) : CountDownTimer(millisInFuture, countDownInterval) {
}
}
Subir el proyecto a un repositorio en Gitlab/Github
Ejercicio 1 de la tarea online de la unidad 2 en HLC


Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.