Sobes.tech
Middle

¿Qué propiedades puedes agregar como extensión en Android?

sobes.tech AI

Respuesta de la IA

En el desarrollo de Android, las funciones y propiedades de extensión permiten agregar nueva funcionalidad a clases existentes sin heredar o usar decoradores. Esto es especialmente útil al trabajar con clases estándar del SDK.

Propiedades de extensión son propiedades que podemos agregar a clases existentes. No almacenan estado, su valor calculado se determina mediante un getter.

Ejemplos de uso de propiedades de extensión en Android:

  1. Simplificación del acceso a LayoutInflater:

    // Agregar una propiedad de extensión para acceder a LayoutInflater
    val Context.layoutInflater: LayoutInflater  
        get() = LayoutInflater.from(this)  
    

    Ahora se puede usar context.layoutInflater en lugar de LayoutInflater.from(context).

  2. Propiedad corta para ocultar View:

    // Propiedad de extensión para establecer la visibilidad de View en GONE
    var View.isVisibleGone: Boolean  
        get() = visibility == View.VISIBLE // Getter para verificar el estado actual  
        set(value) { // Setter para establecer el estado  
            visibility = if (value) View.VISIBLE else View.GONE  
        }
    

    Ahora se puede usar view.isVisibleGone = false para ocultar View.

  3. Obtener tamaño de pantalla en DP:

    // Propiedad de extensión para obtener el ancho de pantalla en DP
    val Context.screenWidthInDp: Int  
        get() = resources.displayMetrics.widthPixels / resources.displayMetrics.density.toInt()  
    

    Ejemplo de uso: context.screenWidthInDp.

  4. Acceso a SharedPreferences:

    // Propiedad de extensión para obtener SharedPreferences por nombre
    fun Context.sharedPreferences(name: String): SharedPreferences =  
        getSharedPreferences(name, Context.MODE_PRIVATE)  
    

    Aunque es una función, a menudo se usa como propiedad para un acceso conveniente: context.sharedPreferences("my_prefs").

Puntos importantes sobre propiedades de extensión:

  • No pueden tener campos de respaldo (variables que almacenan valores).
  • Deben definirse solo con un getter (solo lectura) o con getter y setter (lectura-escritura).
  • Se compilan como métodos estáticos, por lo que se llaman a través de la clase contenedora.

En esencia, en Android, se puede agregar cualquier propiedad calculada que lógicamente pertenezca a una clase existente y facilite su uso, evitando crear funciones auxiliares o clases envolventes.