Sobes.tech
Middle

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:

  1. 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.layoutInflater umesto LayoutInflater.from(context).

  2. 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 = false za skrivanje View-a.

  3. 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.

  4. 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.