Progmar Marcin Załęczny

Zasoby w Androidzie

W Androidzie zasobem może być plik:

  • utwór muzyczny (umieszczony w res/raw),
  • plik z grafiką (umieszczony w res/drawable*),
  • layout aplikacji (umieszczony w res/layout),
  • plik definijący menu aktywności (umieszczony w res/menu),
  • plik definijący wymiary (umieszczony w res/values),
  • plik definijący łańcuchy znaków (umieszczony w res/values),
  • plik definijący style (umieszczony w res/values),
  • plik definijący kolory (umieszczony w res/values),

lub wartość np. identyfikator dowolnej kontrolki.

Wszystkie grafiki umieszczane są w podkatalogach:

  • drawable pliki graficzne wspólne dla wszystkich rozdzielczości,
  • drawable-ldpi pliki graficzne o rozmiarze 36px x 36px (pliki dla ekranów o niskiej rozdzielczości - 120 dpi),
  • drawable-mdpi pliki graficzne o rozmiarze 48px x 48px (pliki dla ekranów o średniej rozdzielczości - 160 dpi),
  • drawable-hdpi pliki graficzne o rozmiarze 72px x 72px (pliki dla ekranów o wysokiej rozdzielczości - 240 dpi),
  • drawable-xhdpi pliki graficzne o rozmiarze 96px x 96px (pliki dla ekranów o ekstra wysokiej rozdzielczości - 320 dpi),
  • drawable-xxhdpi pliki graficzne o rozmiarze 144px x 144px (pliki dla ekranów o super ekstra wysokiej rozdzielczości - 480 dpi).

Jeśli w projekcie jest zaznaczona opcja menu Project->Build Automatically, to po każdej zmianie w plikach zasobów jest autogenerowana klasa z identyfikatorami tychże zasobów - R. Umieszczona jest ona w podkatalogu gen/com.example.appname. Dzięki tej klasie możemy odwoływać się w kodzie programu do poszczególnych zasobów. Bez względu na ilość plików zasobów istnieje tylko jeden plik R.java. Ma on przykładowo następującą postać:


package com.example.appname;

public final class R {
    public static final class attr {
    }
    
    public static final class dimen {
        public static final int activity_horizontal_margin=0x7f040000;
        public static final int activity_vertical_margin=0x7f040001;
    }
    
    public static final class drawable {
        public static final int ic_launcher=0x7f020000;
    }
    
    public static final class id {
        public static final int action_settings=0x7f080004;
        public static final int btnWitaj=0x7f080002;
        public static final int btnZegnaj=0x7f080003;
        public static final int edtImie=0x7f080000;
        public static final int textView1=0x7f080001;
    }
    
    public static final class layout {
        public static final int activity_main=0x7f030000;
    }
    
    public static final class menu {
        public static final int main=0x7f070000;
    }
    
    public static final class string {
        public static final int action_settings=0x7f050001;
        public static final int app_name=0x7f050000;
        public static final int podaj_swoje_imie=0x7f050002;
        public static final int powiedz_witaj=0x7f050003;
        public static final int powiedz_zegnaj=0x7f050004;
    }
    
    public static final class style {
        public static final int AppBaseTheme=0x7f060000;
        public static final int AppTheme=0x7f060001;
    }
}

Do zasobów w pliku layoutu odwołujemy się za pomocą składni @[+]resource_type/resource_name, np: @string/app_name lub @+id/btnWitaj. Natomiast odwołanie do nich z kodu aplikacji wygląda następująco: R.resource_type.resource_name, np: R.string.app_name oraz R.id.btnWitaj.