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:
-
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.layoutInflatermístoLayoutInflater.from(context). -
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 = falsepro skrytí View. -
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. -
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.