Sobes.tech
Junior

Czym są zasoby w Androidzie i jakie dane można w nich przechowywać?

sobes.tech AI

Odpowiedź od AI

Zasoby w Androidzie to dane zewnętrzne, które są wykorzystywane przez aplikację, ale nie są bezpośrednio zawarte w kodzie. Są oddzielone od logiki aplikacji i przechowywane w podkatalogach folderu res w katalogu głównym projektu. Android zapewnia zestaw narzędzi do dostępu i zarządzania tymi zasobami.

Zasoby służą do:

  • Lokalizacji aplikacji (obsługa różnych języków).
  • Dostosowania do różnych rozmiarów i rozdzielczości ekranów.
  • Oddzielenia projektu od logiki.
  • Uproszczenia aktualizacji interfejsu.

W zasobach można przechowywać następujące typy danych:

  • Drawable: Różne elementy graficzne, takie jak obrazy (PNG, JPEG, GIF), definicje XML kształtów, przełączniki itp. Przechowywane w podkatalogach drawable.
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
        <solid android:color="#FF0000"/>
        <corners android:radius="10dp"/>
    </shape>
    
  • Layout: Pliki XML opisujące strukturę interfejsu użytkownika Activity, Fragment lub View. Przechowywane w podkatalogach layout.
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Witaj, świecie!"/>
    </LinearLayout>
    
  • Mipmap: Optymalizowane obrazy ikon aplikacji o różnych gęstościach. Preferowane do ikon niż drawable. Przechowywane w podkatalogach mipmap (np. mipmap-hdpi, mipmap-xhdpi).
  • String: Wartości tekstowe używane w aplikacji. Umożliwiają łatwą lokalizację tekstu. Przechowywane w plikach XML w podkatalogach values (np. values/strings.xml).
    <resources>
        <string name="app_name">Moja aplikacja</string>
        <string name="welcome_message">Witamy!</string>
    </resources>
    
  • Style: Definicje stylów dla widoków. Umożliwiają centralne zarządzanie atrybutami wyglądu. Przechowywane w plikach XML w podkatalogach values (np. values/styles.xml).
    <resources>
        <style name="MyTextViewTextAppearance" parent="android:TextAppearance.Medium">
            <item name="android:textColor">#000000</item>
            <item name="android:textStyle">bold</item>
        </style>
    </resources>
    
  • Theme: Definicje motywów, które są stosowane do całej Activity lub aplikacji. Dziedziczą po stylach. Przechowywane w plikach XML w podkatalogach values.
  • Array: Tablice wartości tekstowych, liczb całkowitych lub odwołań do zasobów. Przechowywane w plikach XML w podkatalogach values.
    <resources>
        <string-array name="planets_array">
            <item>Merkury</item>
            <item>Wenus</item>
            <item>Ziemia</item>
            <item>Mars</item>
        </string-array>
    </resources>
    
  • Color: Definicje kolorów w formacie szesnastkowym lub odwołania do innych kolorów. Przechowywane w plikach XML w podkatalogach values (np. values/colors.xml).
    <resources>
        <color name="colorPrimary">#008577</color>
        <color name="colorAccent">#03DAC5</color>
    </resources>
    
  • Dimension: Definicje rozmiarów, takich jak marginesy, paddingi, rozmiary czcionek itp., z jednostkami miary (dp, sp, pt, px, mm, in). Przechowywane w plikach XML w podkatalogach values (np. values/dimens.xml).
    <resources>
        <dimen name="margin_small">8dp</dimen>
        <dimen name="font_size_medium">16sp</dimen>
    </resources>
    
  • Raw: Dowolne pliki w formacie surowym (dźwięk, wideo, pliki tekstowe itp.). Dostęp przez strumień wejściowy. Przechowywane w podkatalogach raw.
  • XML: Dowolne pliki XML, które można analizować w aplikacji (np. pliki konfiguracyjne). Przechowywane w podkatalogach xml.

Dostęp do zasobów odbywa się przez automatycznie generowaną klasę R. Na przykład, aby uzyskać dostęp do zasobu tekstowego app_name:

// Java
String appName = getResources().getString(R.string.app_name);
// Kotlin
val appName = resources.getString(R.string.app_name)

Użycie zasobów pozwala na tworzenie elastycznych i łatwych do utrzymania aplikacji Android.