Kotlin facilita la vida del desarrollador de Android. La funcionalidad de extensión de Kotlin es una de mis características favoritas, evita tener que escribir código repetitivo y usar código re forma regular.
- Context
- Activity
- Fragment
- ViewGroup
- View
- String
- NavControler
- Drawable
Context
Extenciones de Kotlin que se extienden de Context
Context.toast
Context.toast Métodos de extensión para mostrar un mensaje toast en pantalla
/** * Método de extensión para mostrar brindis por contexto. */ fun Context?.toast(text: CharSequence, duration: Int = Toast.LENGTH_SHORT) = this?.let { Toast.makeText(it, text, duration).show() } /** * Método de extensión para mostrar brindis por contexto. */ fun Context?.toast(@StringRes textId: Int, duration: Int = Toast.LENGTH_SHORT) = this?.let { Toast.makeText(it, textId, duration).show() }
Ejemplo de uso en: Usar Toast en Kotlin
Context.vibrate
Extensión Kotlin para hacer vibrar el dispositivo.
/** * Método de extensión para hacer vibrar. */ fun Context.vibrate(pattern: LongArray = longArrayOf(0, 150)) { val vibrator = applicationContext.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator? ?: return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { vibrator.vibrate( VibrationEffect.createWaveform(pattern, VibrationEffect.DEFAULT_AMPLITUDE) ) } else { @Suppress("DEPRECATION") vibrator.vibrate(pattern, -1) } }
Context.hideKeyboard
Extensión Kotlin para ocultar el teclado desde el Context.
/** * Método de extensión para ocultar el teclado. */ fun Context.hideKeyboard(view: View) { val inputMethodManager = getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager inputMethodManager.hideSoftInputFromWindow(view.windowToken, 0) }
Context.getColorCompat
tExtensión Kotlin para proporcionar un acceso más simple para obtener el color de un recurso a partir de us ID
/** * Método de extensión para obtener el color del resource. */ fun Context.getColorCompat(@ColorRes id: Int) = ContextCompat.getColor(this, id)
Ejemplo de uso en Obtener Color del resource – Extension Kotlin
Activity
Extenciones de Kotlin que se extienden de Activity
Activity.hideKeyboard()
Extensión Kotlin para ocultar el teclado des de el Activity.
/** * Método de extensión para ocultar el teclado. */ fun Activity.hideKeyboard() { hideKeyboard(currentFocus ?: View(this)) }
Fragment
Extenciones de Kotlin que se extienden de Fragment
Fragment.withArgs
Extensión Kotlin para agilizar el proceso de traspaso de argumentos de una Activity hacia un Fragment o de Fragment a Fragment
/** * Método de extensión para para agilizar el paso de argumentos */ inline fun <T : Fragment> T.withArgs(argsBuilder: Bundle.() -> Unit): T = this.apply { arguments = Bundle().apply(argsBuilder) }
Ejemplo de uso en Crear un ModalSheet en Kotlin apartado pasar argumentos
Fragment.hideKeyboard
Extensión Kotlin para ocultar el teclado desde un Fragment.
/** * Método de extensión para ocultar el teclado. */ fun Fragment.hideKeyboard() { view?.let { activity?.hideKeyboard(it) } }
View
Extenciones de Kotlin que se extienden de View
View.Shake
Extensión Kotlin para animar una vista con animación sacudir
/** * Extensión Kotlin sacudir una vista. */ fun View.shake() { val objAnim = ObjectAnimator.ofFloat( this, View.TRANSLATION_X, 0F, 15F, -15F, 15F, -15F, 6F, -6F, 3F, -3F, 0F ).setDuration(750) objAnim.start() }
View.ShakeRotate
Extensión Kotlin para añadir efecto sacudir y rotar en una vista
/** * Extensión Kotlin sacudir y rotar una vista. */ fun View.shakeRotate() { val objAnim1 = ObjectAnimator.ofFloat( this, View.TRANSLATION_X, 0F, 15F, -15F, 15F, -15F, 6F, -6F, 3F, -3F, 0F ).setDuration(750) val objAnim2 = ObjectAnimator.ofFloat( this, View.ROTATION, 0F, 6F, -6F, 6F, -6F, 3F, -3F, 1F, -1F, 0F ).setDuration(750) val animatorSet = AnimatorSet() animatorSet.play(objAnim1).with(objAnim2) animatorSet.start() }
NavController
Extenciones de Kotlin que se extienden de NavController
NavController.navigateSafe
Extensión Kotlin para navegar a otra vista de forma segura, evita pedir navegación si el destino es el origen actual
/** * Método de extensión para navegación segura. */ fun NavController.navigateSafe( @IdRes resId: Int, args: Bundle? = null, navOptions: NavOptions? = null, navExtras: Navigator.Extras? = null ) { val action = currentDestination?.getAction(resId) ?: graph.getAction(resId) if (action != null && currentDestination?.id != action.destinationId) { navigate(resId, args, navOptions, navExtras) } }