Sobes.tech
Middle

Jaké vlastnosti můžete přidat jako rozšíření v Androidu?

sobes.tech AI

Odpověď od AI

V vývoji Android umožňují rozšířené funkce (extension functions a properties) přidávat novou funkčnost stávajícím třídám bez dědičnosti nebo použití dekorátorů. To je obzvlášť užitečné při práci se standardními třídami SDK.

Rozšířené vlastnosti jsou vlastnosti, které můžeme přidat ke stávajícím třídám. Neuchovávají stav, jejich vypočítaná hodnota je určena getterem.

Příklady použití rozšířených vlastností v Androidu:

  1. Zjednodušení přístupu k LayoutInflater:

    // Přidání rozšířené vlastnosti pro přístup k LayoutInflater
    val Context.layoutInflater: LayoutInflater  
        get() = LayoutInflater.from(this)  
    

    Nyní lze používat context.layoutInflater místo LayoutInflater.from(context).

  2. Krátká vlastnost pro skrytí View:

    // Rozšířená vlastnost pro nastavení viditelnosti View na GONE
    var View.isVisibleGone: Boolean  
        get() = visibility == View.VISIBLE // Getter pro kontrolu aktuálního stavu  
        set(value) { // Setter pro nastavení stavu  
            visibility = if (value) View.VISIBLE else View.GONE  
        }
    

    Nyní lze použít view.isVisibleGone = false pro skrytí View.

  3. Získání velikosti obrazovky v DP:

    // Rozšířená vlastnost pro získání šířky obrazovky v DP
    val Context.screenWidthInDp: Int  
        get() = resources.displayMetrics.widthPixels / resources.displayMetrics.density.toInt()  
    

    Příklad použití: context.screenWidthInDp.

  4. Přístup ke SharedPreferences:

    // Rozšířená vlastnost pro získání SharedPreferences podle jména
    fun Context.sharedPreferences(name: String): SharedPreferences =  
        getSharedPreferences(name, Context.MODE_PRIVATE)  
    

    Ačkoliv je to funkce, často se používá jako vlastnost pro pohodlný přístup: context.sharedPreferences("my_prefs").

Důležité body o rozšířených vlastnostech:

  • Nemohou mít backing fields (proměnné, které ukládají hodnotu).
  • Musí být definovány buď pouze s getterem (pouze pro čtení), nebo s getterem a setterem (čtení-zápis).
  • Kompilují se jako statické metody, takže jsou volány přes třídu-vlastníka.

V podstatě v Androidu lze přidat jakoukoli vypočítanou vlastnost, která logicky patří ke stávající třídě a usnadňuje její použití, aniž by bylo nutné vytvářet pomocné funkce nebo obalové třídy.