Anko: Androd + Kotlin
video[Tutorial] Anko Android + Kotlin
Anko es una librería creada en Kotlin por JetBrains que tiene como propósito agilizar la creación de aplicaciones Android. Su nombre ha sido extraído de las dos primeras letras de Android y Kotlin -> Anko. Las características que nos ofrece pueden dividirse en cuatro módulos:
- Funciones comunes: Pequeñas funciones de ayuda para lanzar diálogos, intenciones, etc.
- Layouts: Creación rápida de layouts dinámicos desde código.
- SQLite: Colección de ayudantes para procesar consultas SQLite.
- Corutinas: utilidades basadas en la biblioteca kotlinx.coroutines.
Para añadir Anko a tu proyecto en build.gradle(Project) inserta:
buildscript { ext.ankoVersion = "0.10.8" …
En build.gradle(Module) inserta la siguiente :
implementation "org.jetbrains.anko:anko:$ankoVersion"Si solo quieres utilizar algunas características puedes usar:
// Funciones comunes implementation "org.jetbrains.anko:anko-commons:$anko_version" // Layouts implementation "org.jetbrains.anko:anko-sdk25:$anko_version" implementation "org.jetbrains.anko:anko-appcompat-v7:$anko_version" // SQLite implementation "org.jetbrains.anko:anko-sqlite:$anko_version" // Corutinas implementation "org.jetbrains.anko:anko-sdk25-coroutines:$anko_version" implementation "org.jetbrains.anko:anko-appcompat-v7-coroutines:$anko_version"Si utilizas alguna librería de compatibilidad necesitarás:
// Appcompat-v7 (solo Anko Funciones comunes) implementation "org.jetbrains.anko:anko-appcompat-v7-commons:$anko_version" // Appcompat-v7 (Anko Layouts) implementation "org.jetbrains.anko:anko-appcompat-v7:$anko_version" implementation "org.jetbrains.anko:anko-coroutines:$anko_version" // CardView-v7 implementation "org.jetbrains.anko:anko-cardview-v7:$anko_version" // Design implementation "org.jetbrains.anko:anko-design:$anko_version" implementation "org.jetbrains.anko:anko-design-coroutines:$anko_version" // GridLayout-v7 implementation "org.jetbrains.anko:anko-gridlayout-v7:$anko_version" // Percent implementation "org.jetbrains.anko:anko-percent:$anko_version" // RecyclerView-v7 implementation "org.jetbrains.anko:anko-recyclerview-v7:$anko_version" implementation "org.jetbrains.anko:anko-recyclerview-v7-coroutines:$anko_version" // Support-v4 (solo Anko Funciones comunes) implementation "org.jetbrains.anko:anko-support-v4-commons:$anko_version" // Support-v4 (Anko Layouts) implementation "org.jetbrains.anko:anko-support-v4:$anko_version" // ConstraintLayout implementation "org.jetbrains.anko:anko-constraint-layout:$anko_version"
Funciones comunes
Este módulo de Anko incorpora una serie de funciones de extensión que simplifican la realización de algunas tareas comunes. Podemos:Asignar un escuchador de eventos con un método abreviado:
sin Anko
boton.setOnClickListener { … } |
con Anko
boton.onClick { … } |
val intent = Intent(this, Activid-ad::class.java) intent.putExtra("id", 5) intent.putExtra("nombre", "Juan") startActivity(intent) |
startActivi-ty<Actividad>("id" to 5, "nombre" to "Juan") |
browse("http://androidcurso.com") share("compartir", "asunto") email("correo@upv.es", "asunto", "correo")Mostrar diálogos de alerta:
val builder = AlertDialog.Builder(this) builder.setTitle("Titulo") builder.setMessage("Mensaje") builder.setPositiveButton("OK") {…} build-er.setNegativeButton("Cancel"){…} builder.show() |
alert(Appcompat,"Titulo","Mensaje") { positiveButton("OK") {…} negativeButton("Cancel") {…} }.show() |
Toast.makeText(this, "mensaje", Toast.LENGTH_SHORT).show() |
toast("Mensaje") |
Snackbar.make( findViewBy-Id(android.R.id.content), "Mensaje", Snackbar.LENGTH_LONG).show() |
longSnackbar(findViewById( android.R.id.content), "Men-saje") |
val dpAsPx = TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, 10f, getResources().getDisplayMetrics()) |
val dpAsPx = dip(10f) |
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP){…} if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){…} |
doIfSdk(Build.VERSION_CODES.LOLLIPOP){…} do-FromSdk(Build.VERSION_CODES.LOLLIPOP){} |
Thread { run() { runOnUiThread { toast("ejecut. desde otro hilo") } } }.start() |
doAsync { uiThread { toast("ejecutado desde otro hilo") } } |
Layouts
Este módulo de Anko permite insertar layouts por código en tiempo de ejecu-ción, en lugar de diseñarlos en XML:Más info: https://medium.com/@v.souhrada/introduction-to-anko-for-android-part-1-6178d536cbe6setContentView(R.layout.activity_main)verticalLayout { val nombre = editText() button("Escribe tu nombre") { onClick { toast("Hola, ${nombre.text}!") } } }
desafio
Desafío: Usar Anko para crear un layout.
Trata de crear un layout de Audiolibros utilizando Anko en lugar del diseño en XML.[1] https://www.kotlindevelopment.com/why-should-use-anko/