Sobes.tech
Middle

Aké vlastnosti môžete pridať ako rozšírenie v Android?

sobes.tech AI

Odpoveď od AI

V Android vývoji rozšírenia (extension functions a properties) umožňujú pridávať novú funkcionalitu existujúcim triedam bez ich dedičnosti alebo použitia dekorátorov. To je obzvlášť užitočné pri práci so štandardnými triedami SDK.

Rozšírenia vlastností (Extension Properties) sú vlastnosti, ktoré môžeme pridávať k existujúcim triedam. Neuchovávajú stav, ich vypočítaná hodnota je určená getterom.

Príklady použitia rozšírení vlastností v Android:

  1. Zjednodušenie prístupu k LayoutInflater:

    // Pridanie rozšírenia vlastnosti pre prístup k LayoutInflater
    val Context.layoutInflater: LayoutInflater  
        get() = LayoutInflater.from(this)  
    

    Teraz môžete použiť context.layoutInflater namiesto LayoutInflater.from(context).

  2. Krátka vlastnosť na skrytie View:

    // Rozšírenie vlastnosti na nastavenie viditeľnosti View na GONE
    var View.isVisibleGone: Boolean  
        get() = visibility == View.VISIBLE // Getter na kontrolu aktuálneho stavu  
        set(value) { // Setter na nastavenie stavu  
            visibility = if (value) View.VISIBLE else View.GONE  
        }
    

    Teraz môžete použiť view.isVisibleGone = false na skrytie View.

  3. Získanie veľkosti obrazovky v DP:

    // Rozšírenie vlastnosti na získanie šírky obrazovky v DP
    val Context.screenWidthInDp: Int  
        get() = resources.displayMetrics.widthPixels / resources.displayMetrics.density.toInt()  
    

    Príklad použitia: context.screenWidthInDp.

  4. Prístup k SharedPreferences:

    // Rozšírenie vlastnosti na získanie SharedPreferences podľa mena
    fun Context.sharedPreferences(name: String): SharedPreferences =  
        getSharedPreferences(name, Context.MODE_PRIVATE)  
    

    Hoci je to funkcia, často sa používa ako vlastnosť pre pohodlný prístup: context.sharedPreferences("my_prefs").

Dôležité body o rozšíreniach vlastností:

  • Nemôžu mať backing fields (premenné, ktoré uchovávajú hodnotu).
  • Musia byť definované buď len s getterom (len na čítanie), alebo s getterom a setterom (na čítanie a zápis).
  • Kompilujú sa ako statické metódy, preto ich volanie prebieha cez triedu-vlastníka.

V podstate, ako rozšírenie v Android môžete pridať akúkoľvek vypočítateľnú vlastnosť, ktorá logicky patrí k existujúcemu triedu a zjednodušuje jeho použitie, vyhýbajúc sa tvorbe pomocných funkcií alebo obalových tried.