Koje osobine možete dodati kao proširenje u Androidu?
sobes.tech АИ
Одговор од АИ
U Android razvoju proširenja (extension functions i properties) omogućavaju dodavanje nove funkcionalnosti postojećim klasama bez nasleđivanja ili korišćenja dekoratora. Ovo je posebno korisno pri radu sa standardnim SDK klasama.
Proširenja svojstava (Extension Properties) su svojstva koja možemo dodavati postojećim klasama. Oni ne čuvaju stanje, već se njihova izračunata vrednost određuje putem gettera.
Primeri korišćenja proširenja svojstava u Android:
-
Olakšavanje pristupa LayoutInflater-u:
// Dodavanje proširenja svojstva za pristup LayoutInflater-u val Context.layoutInflater: LayoutInflater get() = LayoutInflater.from(this)Sada možete koristiti
context.layoutInflaterumestoLayoutInflater.from(context). -
Kratko svojstvo za skrivanje View-a:
// Proširenje svojstva za postavljanje vidljivosti View-a na GONE var View.isVisibleGone: Boolean get() = visibility == View.VISIBLE // Geter za proveru trenutnog stanja set(value) { // Seter za postavljanje stanja visibility = if (value) View.VISIBLE else View.GONE }Sada možete koristiti
view.isVisibleGone = falseza skrivanje View-a. -
Dobijanje veličine ekrana u DP:
// Proširenje svojstva za dobijanje širine ekrana u DP val Context.screenWidthInDp: Int get() = resources.displayMetrics.widthPixels / resources.displayMetrics.density.toInt()Primer korišćenja:
context.screenWidthInDp. -
Pristup SharedPreferences:
// Proširenje svojstva za dobijanje SharedPreferences po imenu fun Context.sharedPreferences(name: String): SharedPreferences = getSharedPreferences(name, Context.MODE_PRIVATE)Iako je ovo funkcija, često se koristi kao svojstvo za jednostavan pristup:
context.sharedPreferences("my_prefs").
Važni momenti o proširenjima svojstava:
- Ne mogu imati backing fields (promenljive koje čuvaju vrednost).
- Moraju biti definisana ili samo sa geterom (za čitanje), ili sa geterom i seterom (za čitanje i pisanje).
- Kompajliraju se kao statičke metode, pa se pozivaju preko klase-nositelja.
U suštini, kao proširenje u Androidu možete dodati bilo koje izračunljivo svojstvo koje logički pripada postojećem klasu i olakšava njegovo korišćenje, izbegavajući kreiranje pomoćnih funkcija ili oblačnih klasa.