May 11, 2022

BitCuco

¡Hola Mundo!

Creación de calendarios con CalendarView en Kotlin

CalendarView es una biblioteca para Kotlin, altamente personalizable, que funciona para crear calendarios en las aplicaciones. Para la creación de calendarios con CalendarView en Kotlin, es sencillo a través de todas las personalizaciones que ofrece RecyclerView, ya que CalendarView se extiende desde RecyclerView, permitiendo así tener una lógica prediseñada, que el usuario puede utilizar en sus views.

Algunas de sus características principales son las siguientes:

  • Selección única o de rango: la biblioteca proporciona la lógica de calendario que le permite implementar la vista de la forma que se desee.
  • Modo semana o mes: muestra 1 fila de días de la semana o cualquier número de filas del 1 al 6.
  • Fechas límite: Limitar el intervalo de fechas del calendario.
  • View de fechas personalizado: Permite que sus celdas se vean y funcionen a la medida.
  • View de calendario personalizado: Permite que su calendario se vea y funcione como desee.
  • Utilizar cualquier día como el primer día de la semana.
  • Modo de desplazamiento horizontal o vertical.
  • Agregar encabezados / pies de página de cualquier tipo cada mes.
  • Desplazamiento a cualquier vista de fecha o mes usando la fecha.

Instalar la biblioteca

Para comenzar con la creación de calendarios con CalendarView en Kotlin, se puede clonar directamente la biblioteca desde Github, por medio del comando:

git clone https://github.com/kizitonwose/CalendarView.git

O bien importando la biblioteca en su proyecto actual en Android Studio.

Implementación de CalendarView

Para implementar un CalendarView, se siguen tres pasos sencillos que se encuentran en el README del proyecto. Éstos pasos en forma resumida son los siguientes:

1- Inicializar ThreeTenABP en la clase de Application:

class AplicacionDemo : Application() {
    override fun onCreate() {
        super.onCreate()
        AndroidThreeTen.init(this)
    }
}

2- Agregar el elemento CalendarView al xml:

 <com.kizitonwose.calendarview.CalendarView
    android:id="@+id/miVistaCalendario"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:cv_dayViewResource="@layout/calendario_layout" ><

3- Crear el recurso res/layout/calendario_layout.xml

 <TextView
    android:id="@+id/calendarioDia"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:textSize="14sp"
    tools:text="20" >

4- Crear un viewContainer con el elemento:

class DiaViewContainer(view: View) : ViewContainer(view) {
    val textoDia = view.calendarioDia
    // ...
}

5- Crear un dayBinder para el viewContainer:

miVistaCalendario.dayBinder = object : DayBinder<DiaViewContainer> {
    override fun create(view: View) = DiaViewContainer(view)
    override fun bind(container: DiaViewContainer, day: CalendarDay)     {
        container.textoDia.text = day.date.dayOfMonth.toString()
    }
}

6- Incluir el elemento en el Fragment o Activity:

val mesActual = YearMonth.now()
val primerMes = mesActual.minusMonths(10)
val ultimoMes = mesActual.plusMonths(10)
val primerDiaDeSemana = WeekFields.of(Locale.getDefault()).primerDiaDeSemana
miVistaCalendario.setup(primerMes, ultimoMes, primerDiaDeSemana)
miVistaCalendario.scrollToMonth(mesActual)

Y así tenemos el ejemplo más sencillo del uso de CalendarView. Como vemos, hace uso de la biblioteca de tiempo estándar de java: java.time. El proyecto completo, así como sus diferentes opciones y código con licencia MIT, lo podemos encontrar aquí.