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