Extenciones de Kotlin

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

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()

}

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)
    }
}

Recursos