Więcej typów zasobów

Ta strona zawiera opis następujących typów zasobów, które można udostępniać na zewnątrz:

Wartość logiczna
Zasób XML zawierający wartość logiczną.
Kolor
Zasób XML zawierający wartość koloru (kolor szesnastkowy).
Wymiar
Zasób XML, który zawiera wartość wymiaru (z jednostką miary).
ID
Zasób XML, który zapewnia unikalny identyfikator zasobów i komponentów aplikacji.
Liczba całkowita
Zasób XML, który zawiera liczbę całkowitą.
Tablica liczb całkowitych
Zasób XML, który udostępnia tablicę liczb całkowitych.
Tablica z typem
Zasób XML, który udostępnia obiekt TypedArray (który można wykorzystać na potrzeby tablicy elementów rysowalnych).

Wartość logiczna

Wartość logiczna zdefiniowana w pliku XML.

Uwaga: wartość logiczna to prosty zasób, do którego odwołuje się wartość podana w atrybucie name, a nie nazwa pliku XML. Możesz więc połączyć zasoby logiczne z innymi prostymi zasobami w jednym pliku XML w ramach 1 elementu <resources>.

lokalizacja pliku:
res/values/filename.xml
Nazwa pliku jest dowolna. Jako identyfikator zasobu jest używany element name elementu <bool>.
odniesienie do zasobów:
W Javie: R.bool.bool_name
W pliku XML: @[package:]bool/bool_name
składnia:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool
        name="bool_name"
        >[true | false]</bool>
</resources>
elementy:
<resources>
Wymagane. To jest węzeł główny.

Brak atrybutów.

<bool>
Wartość logiczna: true lub false.

Atrybuty:

name
Ciąg znaków. Nazwa wartości logicznej. Jest on używany jako identyfikator zasobu.
przykład:
Plik XML zapisany o res/values-small/bools.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="screen_small">true</bool>
    <bool name="adjust_view_bounds">true</bool>
</resources>

Wartość logiczną pobiera ten kod aplikacji:

Kotlin

val screenIsSmall: Boolean = resources.getBoolean(R.bool.screen_small)

Java

Resources res = getResources();
boolean screenIsSmall = res.getBoolean(R.bool.screen_small);

Ten kod XML układu korzysta z wartości logicznej atrybutu:

<ImageView
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:src="@drawable/logo"
    android:adjustViewBounds="@bool/adjust_view_bounds" />

Kolor

Wartość koloru zdefiniowana w pliku XML. Kolor jest określany za pomocą wartości RGB i kanału alfa. Zasóbu koloru możesz użyć w dowolnym miejscu, które akceptuje szesnastkową wartość koloru. Zasóbu koloru możesz też użyć, jeśli w pliku XML oczekujesz rysowalnego zasobu, np. android:drawable="@color/green".

Wartość zawsze zaczyna się od znaku funta (#), po którym znajduje się informacja Alfa-Czerwony-Zielony-Niebieski:

  • #RGB
  • #ARGB
  • #RRGGBB
  • #AARRGGBB

Uwaga: kolor to prosty zasób, do którego odwołuje się wartość podana w atrybucie name, a nie nazwa pliku XML. Dzięki temu możesz połączyć zasoby kolorów z innymi prostymi zasobami w jednym pliku XML w ramach 1 elementu <resources>.

lokalizacja pliku:
res/values/colors.xml
Nazwa pliku jest dowolna. Jako identyfikator zasobu używany jest element name elementu <color>.
odniesienie do zasobów:
W Javie: R.color.color_name
W pliku XML: @[package:]color/color_name
składnia:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color
        name="color_name"
        >hex_color</color>
</resources>
elementy:
<resources>
Wymagane. To jest węzeł główny.

Brak atrybutów.

<color>
Kolor wyrażony w systemie szesnastkowym.

Atrybuty:

name
Ciąg znaków. Nazwa koloru. Jest on używany jako identyfikator zasobu.
przykład:
Plik XML zapisany o res/values/colors.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
   <color name="opaque_red">#f00</color>
   <color name="translucent_red">#80ff0000</color>
</resources>

Ten kod aplikacji pobiera zasób koloru:

Kotlin

val color: Int = resources.getColor(R.color.opaque_red)

Java

Resources res = getResources();
int color = res.getColor(R.color.opaque_red);

Poniższy kod XML układu dotyczy atrybutu kolor:

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/translucent_red"
    android:text="Hello"/>

Wymiar

Wartość wymiaru zdefiniowana w pliku XML. Wymiar jest określany przez liczbę, po której następuje jednostka miary, np. 10 pikseli, 2 in lub 5 sp. Android obsługuje te jednostki miary:

dp
Piksele niezależne od gęstości: abstrakcyjna jednostka oparta na fizycznej gęstości ekranu. Jednostki te są przedstawiane względem ekranu o rozdzielczości 160 dpi (kropek na cal), gdzie 1 dp to mniej więcej 1 piksel. W przypadku aplikacji na ekranie o większej gęstości liczba pikseli używanych do rysowania o wartości 1 dp jest skalowana w górę według współczynnika odpowiedniego dla rozdzielczości ekranu.

Podobnie na ekranie o mniejszej gęstości liczba pikseli stosowana w przypadku wartości 1 dp jest pomniejszana. Stosunek dps do pikseli zmienia się wraz z gęstością ekranu, ale niekoniecznie bezpośrednio. Użycie jednostek dp zamiast jednostek w pikselach to rozwiązanie, dzięki któremu wymiary widoku w układzie witryny są odpowiednio zmieniane w zależności od gęstości ekranu. Zapewnia spójność rzeczywistych rozmiarów elementów interfejsu na różnych urządzeniach.

sp
Piksele niezależne od skali – to odpowiednik jednostki dp, ale jest również skalowany zgodnie z rozmiarem czcionki wybranym przez użytkownika. Zalecamy używanie tej jednostki do określania rozmiarów czcionek, ponieważ będą one dostosowywane zarówno do gęstości ekranu, jak i preferencji użytkownika.
pt
Punkty: 1/72 cala w zależności od fizycznego rozmiaru ekranu przy założeniu ekranu o gęstości 72 dpi.
px
Piksele: odpowiada liczbie pikseli widocznych na ekranie. Nie zalecamy korzystania z tej jednostki, ponieważ rzeczywista reprezentacja może różnić się w zależności od urządzenia. Różne urządzenia mogą mieć różną liczbę pikseli na cal, a łączna liczba pikseli na ekranie może być większa lub mniejsza.
mm
Mimetry: w zależności od fizycznego rozmiaru ekranu.
in
Cale: w zależności od fizycznego rozmiaru ekranu.

Uwaga: wymiar to prosty zasób, do którego odwołuje się wartość podana w atrybucie name, a nie nazwa pliku XML. Możesz więc łączyć zasoby wymiarów z innymi prostymi zasobami w jednym pliku XML w ramach 1 elementu <resources>.

lokalizacja pliku:
res/values/filename.xml
Nazwa pliku jest dowolna. Jako identyfikator zasobu używany jest element name elementu <dimen>.
odniesienie do zasobów:
W Javie: R.dimen.dimension_name
W pliku XML: @[package:]dimen/dimension_name
składnia:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen
        name="dimension_name"
        >dimension</dimen>
</resources>
elementy:
<resources>
Wymagane. To jest węzeł główny.

Brak atrybutów.

<dimen>
Wymiar w postaci liczby zmiennoprzecinkowej, po której następuje jednostka miary (dp, sp, pt, px, mm, in).

Atrybuty:

name
Ciąg znaków. Nazwa wymiaru. Jest on używany jako identyfikator zasobu.
przykład:
Plik XML zapisany o res/values/dimens.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="textview_height">25dp</dimen>
    <dimen name="textview_width">150dp</dimen>
    <dimen name="ball_radius">30dp</dimen>
    <dimen name="font_size">16sp</dimen>
</resources>

Ten kod aplikacji pobiera wymiar:

Kotlin

val fontSize: Float = resources.getDimension(R.dimen.font_size)

Java

Resources res = getResources();
float fontSize = res.getDimension(R.dimen.font_size);

Ten kod XML układu stosuje wymiary do atrybutów:

<TextView
    android:layout_height="@dimen/textview_height"
    android:layout_width="@dimen/textview_width"
    android:textSize="@dimen/font_size"/>

ID

Unikalny identyfikator zasobu zdefiniowany w pliku XML. Narzędzia dla programistów na Androida wykorzystują nazwę podaną w elemencie <item>, aby utworzyć unikalną liczbę całkowitą w klasie R.java projektu, której możesz użyć jako identyfikatora zasobów aplikacji, np. View w układzie interfejsu użytkownika, lub unikalnej liczby całkowitej do użycia w kodzie aplikacji, np. identyfikatora okna lub kodu wyniku.

Uwaga: identyfikator to prosty zasób, do którego odwołuje się wartość podana w atrybucie name, a nie nazwa pliku XML. Dzięki temu możesz łączyć zasoby identyfikatorów z innymi prostymi zasobami w jednym pliku XML w ramach 1 elementu <resources>. Co więcej, zasób identyfikatora nie odwołuje się do rzeczywistego elementu zasobu: jest to unikalny identyfikator, który możesz dołączyć do innych zasobów lub użyć jako unikalnej liczby całkowitej w aplikacji.

lokalizacja pliku:
res/values/filename.xml
Nazwa pliku jest dowolna.
odniesienie do zasobów:
W Javie: R.id.name
W pliku XML: @[package:]id/name
składnia:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item
        type="id"
        name="id_name" />
</resources>
elementy:
<resources>
Wymagane. To jest węzeł główny.

Brak atrybutów.

<item>
Określa unikalny identyfikator. Nie przyjmuje żadnych wartości, tylko atrybuty.

Atrybuty:

type
Musi mieć wartość "id".
name
Ciąg znaków. Unikalna nazwa identyfikatora.
przykład:

Plik XML zapisany res/values/ids.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item type="id" name="button_ok" />
    <item type="id" name="dialog_exit" />
</resources>

Ten fragment kodu układu korzysta z identyfikatora "button_ok" widżetu Button:

<Button android:id="@id/button_ok"
    style="@style/button_style" />

Wartość android:id w tym miejscu nie zawiera znaku plusa w odwołaniu do identyfikatora, bo identyfikator już istnieje, jak określono w poprzednim przykładzie ids.xml. Gdy określisz identyfikator dla zasobu XML za pomocą znaku plusa w formacie android:id="@+id/name", będzie to oznaczać, że identyfikator "name" jeszcze nie istnieje i zostanie utworzony.

W tym przykładzie ten fragment kodu zawiera identyfikator "dialog_exit" jako unikalny identyfikator okna:

Kotlin

showDialog(R.id.dialog_exit)

Java

showDialog(R.id.dialog_exit);

W tej samej aplikacji identyfikator "dialog_exit" jest porównywany podczas tworzenia okna:

Kotlin

override fun onCreateDialog(id: Int): Dialog? {
    return when(id) {
        R.id.dialog_exit -> {
            ...
        }
        else -> {
            null
        }
    }
}

Java

protected Dialog onCreateDialog(int id) {
    Dialog dialog;
    switch(id) {
    case R.id.dialog_exit:
        ...
        break;
    default:
        dialog = null;
    }
    return dialog;
}

Liczba całkowita

Liczba całkowita zdefiniowana w pliku XML.

Uwaga: liczba całkowita to prosty zasób, do którego odwołuje się wartość podana w atrybucie name, a nie nazwa pliku XML. Możesz połączyć zasoby całkowite z innymi prostymi zasobami w jednym pliku XML w ramach 1 elementu <resources>.

lokalizacja pliku:
res/values/filename.xml
Nazwa pliku jest dowolna. Jako identyfikator zasobu używany jest element name elementu <integer>.
odniesienie do zasobów:
W Javie: R.integer.integer_name
W pliku XML: @[package:]integer/integer_name
składnia:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer
        name="integer_name"
        >integer</integer>
</resources>
elementy:
<resources>
Wymagane. To jest węzeł główny.

Brak atrybutów.

<integer>
Liczba całkowita.

Atrybuty:

name
Ciąg znaków. Nazwa liczby całkowitej. Jest on używany jako identyfikator zasobu.
przykład:

Plik XML zapisany res/values/integers.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer name="max_speed">75</integer>
    <integer name="min_speed">5</integer>
</resources>

Ten kod aplikacji pobiera liczbę całkowitą:

Kotlin

val maxSpeed: Int = resources.getInteger(R.integer.max_speed)

Java

Resources res = getResources();
int maxSpeed = res.getInteger(R.integer.max_speed);

Tablica liczb całkowitych

Tablica liczb całkowitych zdefiniowana w pliku XML.

Uwaga: tablica całkowita to prosty zasób, do którego odwołuje się wartość podana w atrybucie name, a nie nazwa pliku XML. Możesz połączyć zasoby tablicy całkowitej z innymi prostymi zasobami w jednym pliku XML w ramach 1 elementu <resources>.

lokalizacja pliku:
res/values/filename.xml
Nazwa pliku jest dowolna. Jako identyfikator zasobu używany jest element name elementu <integer-array>.
typ danych skompilowanych zasobów:
Wskaźnik zasobu tablicy liczb całkowitych.
odniesienie do zasobów:
W Javie: R.array.integer_array_name
W pliku XML: @[package:]array/integer_array_name
składnia:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer-array
        name="integer_array_name">
        <item
            >integer</item>
    </integer-array>
</resources>
elementy:
<resources>
Wymagane. To jest węzeł główny.

Brak atrybutów.

<integer-array>
Definiowanie tablicy liczb całkowitych. Zawiera co najmniej 1 element podrzędny <item>.

Atrybuty:

android:name
Ciąg znaków. Nazwa tablicy. Ta nazwa służy jako identyfikator zasobu do odwoływania się do tablicy.
<item>
Liczba całkowita. Wartość może być odwołaniem do innego zasobu całkowitej. Musi być elementem podrzędnym elementu <integer-array>.

Brak atrybutów.

przykład:
Plik XML zapisany o res/values/integers.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer-array name="bits">
        <item>4</item>
        <item>8</item>
        <item>16</item>
        <item>32</item>
    </integer-array>
</resources>

Ten kod aplikacji pobiera tablicę liczb całkowitych:

Kotlin

val bits: IntArray = resources.getIntArray(R.array.bits)

Java

Resources res = getResources();
int[] bits = res.getIntArray(R.array.bits);

Tablica z typem

TypedArray zdefiniowany w pliku XML. Dzięki temu możesz utworzyć tablicę innych zasobów, np. obiekty rysowalne. Tablica nie musi być jednorodna, więc można utworzyć tablicę mieszanych typów zasobów, ale warto wiedzieć, jakie typy danych się w niej znajdują i gdzie się one znajdują, aby można było prawidłowo uzyskać każdy element za pomocą metod get...() klasy TypedArray.

Uwaga: tablica z typem to prosty zasób, do którego odwołuje się wartość podana w atrybucie name, a nie nazwa pliku XML. Dzięki temu możesz łączyć zasoby tablicy o typie z innymi prostymi zasobami w jednym pliku XML w ramach 1 elementu <resources>.

lokalizacja pliku:
res/values/filename.xml
Nazwa pliku jest dowolna. Jako identyfikator zasobu używany jest element name elementu <array>.
typ danych skompilowanych zasobów:
Wskaźnik zasobu do TypedArray.
odniesienie do zasobów:
W Javie: R.array.array_name
W pliku XML: @[package:]array/array_name
składnia:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array
        name="integer_array_name">
        <item>resource</item>
    </array>
</resources>
elementy:
<resources>
Wymagane. To jest węzeł główny.

Brak atrybutów.

<array>
Definiuje tablicę. Zawiera co najmniej 1 element podrzędny <item>.

Atrybuty:

android:name
Ciąg znaków. Nazwa tablicy. Ta nazwa służy jako identyfikator zasobu do odwoływania się do tablicy.
<item>
Materiały ogólne. Wartość może być odwołaniem do zasobu lub prostym typem danych. Musi być elementem podrzędnym elementu <array>.

Brak atrybutów.

przykład:
Plik XML zapisany o res/values/arrays.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array name="icons">
        <item>@drawable/home</item>
        <item>@drawable/settings</item>
        <item>@drawable/logout</item>
    </array>
    <array name="colors">
        <item>#FFFF0000</item>
        <item>#FF00FF00</item>
        <item>#FF0000FF</item>
    </array>
</resources>

Ten kod aplikacji pobiera każdą tablicę, a następnie pierwszy wpis w każdej tablicy:

Kotlin

val icons: TypedArray = resources.obtainTypedArray(R.array.icons)
val drawable: Drawable = icons.getDrawable(0)

val colors: TypedArray = resources.obtainTypedArray(R.array.colors)
val color: Int = colors.getColor(0,0)

Java

Resources res = getResources();
TypedArray icons = res.obtainTypedArray(R.array.icons);
Drawable drawable = icons.getDrawable(0);

TypedArray colors = res.obtainTypedArray(R.array.colors);
int color = colors.getColor(0,0);