Sobes.tech
Middle

Jakie właściwości możesz dodać jako rozszerzenie w Android?

sobes.tech AI

Odpowiedź od AI

W rozwoju Android funkcje i właściwości rozszerzeń pozwalają na dodanie nowej funkcjonalności do istniejących klas bez dziedziczenia lub użycia dekoratorów. Jest to szczególnie przydatne podczas pracy z standardowymi klasami SDK.

Właściwości rozszerzeń to właściwości, które możemy dodawać do istniejących klas. Nie przechowują stanu, ich wartość obliczana jest za pomocą getter'a.

Przykłady użycia właściwości rozszerzeń w Android:

  1. Uproszczenie dostępu do LayoutInflater:

    // Dodanie właściwości rozszerzenia do dostępu do LayoutInflater
    val Context.layoutInflater: LayoutInflater  
        get() = LayoutInflater.from(this)  
    

    Teraz można używać context.layoutInflater zamiast LayoutInflater.from(context).

  2. Krótka właściwość do ukrywania View:

    // Właściwość rozszerzenia do ustawiania widoczności View na GONE
    var View.isVisibleGone: Boolean  
        get() = visibility == View.VISIBLE // Getter do sprawdzania aktualnego stanu  
        set(value) { // Setter do ustawiania stanu  
            visibility = if (value) View.VISIBLE else View.GONE  
        }
    

    Teraz można używać view.isVisibleGone = false do ukrycia View.

  3. Pobieranie rozmiaru ekranu w DP:

    // Właściwość rozszerzenia do pobierania szerokości ekranu w DP
    val Context.screenWidthInDp: Int  
        get() = resources.displayMetrics.widthPixels / resources.displayMetrics.density.toInt()  
    

    Przykład użycia: context.screenWidthInDp.

  4. Dostęp do SharedPreferences:

    // Właściwość rozszerzenia do pobierania SharedPreferences po nazwie
    fun Context.sharedPreferences(name: String): SharedPreferences =  
        getSharedPreferences(name, Context.MODE_PRIVATE)  
    

    Chociaż jest to funkcja, często używa się jej jako właściwości dla wygody: context.sharedPreferences("my_prefs").

Ważne punkty o właściwościach rozszerzeń:

  • Nie mogą mieć pól zapasowych (zmiennych przechowujących wartość).
  • Muszą być zdefiniowane tylko z getterem (tylko do odczytu) lub z getterem i setterem (odczyt-zapis).
  • Kompilują się jako metody statyczne, więc wywołuje się je przez klasę właściciela.

W skrócie, w Androidzie można dodać dowolną właściwość obliczaną, która logicznie należy do istniejącej klasy i upraszcza jej użycie, unikając tworzenia funkcji pomocniczych lub klas opakowujących.