Zasoby rysowalne

Zasób rysowalny to ogólna koncepcja grafiki, którą można narysować na ekranie i którą można pobrać za pomocą interfejsów API, np. getDrawable(int), lub zastosować do innego zasobu XML z atrybutami takimi jak android:drawable i android:icon. Istnieje kilka typów elementów rysowalnych:

Plik bitmapy
Plik graficzny (PNG, WEBP, JPG lub GIF). Tworzy BitmapDrawable.
Plik dziewięciu poprawek
Plik PNG z rozciąganymi regionami, który umożliwia zmianę rozmiaru obrazów na podstawie zawartości (.9.png). Tworzy NinePatchDrawable.
Lista warstw
Element rysowalny, który zarządza wieloma innymi elementami. Są one rysowane w kolejności według tablic, więc element o największym indeksie jest rysowany na górze. Tworzy LayerDrawable.
Lista stanów
Plik XML, który odwołuje się do różnych grafik bitmapowych w przypadku różnych stanów – na przykład użycia innego obrazu po kliknięciu przycisku. Tworzy StateListDrawable.
Lista poziomów
Plik XML definiujący element rysowalny, który zarządza wieloma alternatywnymi elementami rysunkowymi. Każdy z nich ma przypisaną maksymalną wartość liczbową. Tworzy LevelListDrawable.
Przejście z możliwością rysowania
Plik XML definiujący element rysowalny, który może przechodzić między 2 zasobami rysowalnymi. Tworzy TransitionDrawable.
Wstawiana treść, którą można rysować
Plik XML definiujący element rysujący, który umieszcza inny element rysowalny o określoną odległość. Jest to przydatne, gdy widok wymaga rysowalnego tła, które jest mniejsze niż rzeczywiste granice widoku.
Klips, który można przeciągnąć
Plik XML definiujący element rysowalny, który przycina inny element rysowalny na podstawie jego bieżącej wartości. Tworzy ClipDrawable.
Skaluj elementy z elementami rysowalnymi
Plik XML definiujący element rysowalny, który zmienia rozmiar innego elementu rysowalnego na podstawie jego bieżącej wartości. Tworzy ScaleDrawable
Kształt, który można rysować.
Plik XML definiujący kształt geometryczny, w tym kolory i gradienty. Tworzy GradientDrawable.

Informacje na temat tworzenia obiektu AnimationDrawable znajdziesz w dokumencie Zasoby animacji.

Uwaga: zasób kolorów może być również używany jako element rysowalny w pliku XML. Podczas tworzenia rysowalnego listy stanów na przykład dla atrybutu android:drawable możesz odwołać się do zasobu koloru (android:drawable="@color/green").

Bitmapa

Obraz bitmapy. Android obsługuje pliki map bitowych w tych formatach: PNG (preferowany), WEBP (preferowany, wymaga interfejsu API na poziomie 17 lub wyższym), JPG (akceptowany), GIF (odradzany).

Możesz odwołać się bezpośrednio do pliku bitmapy, używając nazwy pliku jako identyfikatora zasobu lub utworzyć identyfikator zasobu aliasu w pliku XML.

Uwaga: pliki bitmapy mogą być automatycznie optymalizowane za pomocą bezstratnej kompresji obrazu przez narzędzie aapt podczas kompilacji. Na przykład plik PNG o prawdziwych kolorach, który nie wymaga więcej niż 256 kolorów, może zostać przekonwertowany do 8-bitowego pliku PNG z paletą kolorów. W rezultacie otrzymujesz obraz o jednakowej jakości, który wymaga mniej pamięci.

Pamiętaj więc, że pliki binarne obrazów umieszczone w tym katalogu mogą się zmienić podczas kompilacji. Jeśli zamierzasz odczytać obraz jako strumień bitów i skonwertować go na bitmapę, umieść obrazy w folderze res/raw/, gdzie nie są zoptymalizowane.

Plik bitmapy

Plik bitmapy to plik PNG, WEBP, JPG lub GIF. Android tworzy zasób Drawable dla każdego z tych plików, gdy zapiszesz go w katalogu res/drawable/.

lokalizacja pliku:
res/drawable/filename.png (.png, .webp, .jpg lub .gif)
Nazwa pliku to identyfikator zasobu
typ danych skompilowanych zasobów:
Wskaźnik zasobu do BitmapDrawable
odniesienie do zasobów:
W Javie: R.drawable.filename
W pliku XML: @[package:]drawable/filename
przykład:
W przypadku obrazu zapisanego w lokalizacji res/drawable/myimage.png ten układ XML stosuje go do widoku:
<ImageView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/myimage" />

Ten kod aplikacji pobiera obraz jako Drawable:

Kotlin

val drawable: Drawable? = ResourcesCompat.getDrawable(resources, R.drawable.myimage, null)

Java

Resources res = getResources();
Drawable drawable = ResourcesCompat.getDrawable(res, R.drawable.myimage, null);
zobacz też:

Mapa bitowa XML

Mapa bitowa XML to zasób zdefiniowany w kodzie XML, który wskazuje plik mapy bitowej. Efektem jest alias nieprzetworzonego pliku bitmapy. W pliku XML można określić dodatkowe właściwości bitmapy, takie jak dithering i stosowanie płytek.

Uwaga: elementu <bitmap> możesz używać jako elementu podrzędnego elementu <item>. Na przykład podczas tworzenia listy stanów lub listy warstw możesz wykluczyć atrybut android:drawable w elemencie <item> i zagnieździć w nim atrybut <bitmap>, który określa element rysowalny.

lokalizacja pliku:
res/drawable/filename.xml
Nazwa pliku to identyfikator zasobu.
typ danych skompilowanych zasobów:
Wskaźnik zasobu do BitmapDrawable
odniesienie do zasobów:
W Javie: R.drawable.filename
W pliku XML: @[package:]drawable/filename
składnia:
<?xml version="1.0" encoding="utf-8"?>
<bitmap
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@[package:]drawable/drawable_resource"
    android:antialias=["true" | "false"]
    android:dither=["true" | "false"]
    android:filter=["true" | "false"]
    android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
                      "fill_vertical" | "center_horizontal" | "fill_horizontal" |
                      "center" | "fill" | "clip_vertical" | "clip_horizontal"]
    android:mipMap=["true" | "false"]
    android:tileMode=["disabled" | "clamp" | "repeat" | "mirror"] />
elementy:
<bitmap>
Wymagane. Określa źródło bitmapy i jego właściwości.

Atrybuty:

xmlns:android
Ciąg znaków. Określa przestrzeń nazw XML. Musi to być "http://schemas.android.com/apk/res/android". Jest to wymagane tylko wtedy, gdy elementem głównym jest <bitmap>. Nie jest on potrzebny, gdy obiekt <bitmap> jest zagnieżdżony w obrębie typu <item>.
android:src
Zasób rysowalny. Wymagany. odniesienie do zasobu, który można przeciągnąć.
android:antialias
Wartość logiczna. Włącza lub wyłącza antyaliasing.
android:dither
Wartość logiczna. Włącza lub wyłącza przyciemnianie bitmapy, jeśli bitmapa nie ma takiej samej konfiguracji pikseli jak ekran, np. mapa bitowa ARGB 8888 na ekranie RGB 565.
android:filter
Wartość logiczna. Włącza lub wyłącza filtrowanie map bitowych. Filtrowanie jest używane, gdy bitmapa jest zmniejszona lub rozciągnięta, aby wygładzić jej wygląd.
android:gravity
Słowo kluczowe. Definiuje grawitację dla bitmapy. Grawitacja wskazuje, gdzie w swoim kontenerze umieścić element rysowalny, jeśli bitmapa jest mniejsza niż kontener.

Musi to być co najmniej jedna z tych wartości stałych rozdzielonych znakiem |:

WartośćOpis
top Umieść obiekt na górze kontenera, nie zmieniając jego rozmiaru.
bottom Umieść obiekt na dole kontenera, nie zmieniając jego rozmiaru.
left Umieść obiekt na lewej krawędzi kontenera, nie zmieniając jego rozmiaru.
right Umieść obiekt na prawej krawędzi kontenera, nie zmieniając jego rozmiaru.
center_vertical Umieść obiekt na środku kontenera w pionie, nie zmieniając jego rozmiaru.
fill_vertical W razie potrzeby zwiększ rozmiar obiektu w pionie, tak aby całkowicie wypełnił kontener.
center_horizontal Umieść obiekt na środku kontenera w poziomie, nie zmieniając jego rozmiaru.
fill_horizontal W razie potrzeby zwiększ rozmiar obiektu w poziomie, aby w pełni wypełnił kontener.
center Umieść obiekt na środku kontenera zarówno na osi pionowej, jak i poziomej, nie zmieniając jego rozmiaru.
fill W razie potrzeby zwiększ rozmiar obiektu w poziomie i pionie, tak aby całkowicie wypełnił kontener. Jest to ustawienie domyślne.
clip_vertical Dodatkowa opcja, dzięki której górne lub dolne krawędzie elementu podrzędnego zostaną przycięte do granic kontenera. Klip jest uzależniony od grawitacji pionowej: gdy grawitacja górna jest ścięta, dolna granica jest odcięta, a dolna – od górnej krawędzi, a żadna z nich nie obcina obydwu krawędzi.
clip_horizontal Dodatkowa opcja, dzięki której lewe lub prawe krawędzie elementu podrzędnego zostaną przycięte do granic kontenera. Klip jest uzależniony od grawitacji poziomej: lewa – prawa – prawa, – prawa – lewa – lewa – obie.
android:mipMap
Wartość logiczna. Włącza lub wyłącza wskazówkę dotyczącą mipmap. Aby dowiedzieć się więcej, przeczytaj setHasMipMap(). Wartość domyślna to false (fałsz).
android:tileMode
Słowo kluczowe. Określa tryb kafelków. Gdy włączony jest tryb kafelków, bitmapa jest powtarzana. Grawitacja jest ignorowana w trybie kafelków.

Musi to być jedna z następujących stałych wartości:

WartośćOpis
disabled Nie układaj bitmapy jako kafelków. jest to wartość domyślna
clamp Powielaj kolor krawędzi, jeśli cieniowanie rysuje poza swoim pierwotnym granicami.
repeat Powtórz obraz cienia w poziomie i w pionie.
mirror Powtórz obraz cienia w poziomie i w pionie, naprzemienne odbicia lustrzane, aby sąsiadujące obrazy zawsze się ze sobą łączyć.
przykład:
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/icon"
    android:tileMode="repeat" />
zobacz też:

Nine-patch

NinePatch to obraz w formacie PNG, w którym możesz zdefiniować elastyczne obszary, które Android skaluje, gdy zawartość widocznego obszaru przekracza normalne granice obrazu. Ten typ obrazu przypisuje się jako tło w widoku, w którym co najmniej jeden wymiar ma wartość "wrap_content".

Po powiększeniu widoku w celu dostosowania go do treści obraz z dziewięcioma punktami również jest skalowany tak, by pasował do jego rozmiaru. Przykładem użycia obrazu z dziewięcioma poprawkami jest tło używane przez standardowy widżet Button na Androidzie, który musi się rozciągać, aby dopasować się do tekstu (lub obrazu) znajdującego się w przycisku.

Tak jak w przypadku zwykłej mapy bitowej, możesz odwoływać się do pliku dziewięciu poprawek bezpośrednio lub z zasobu zdefiniowanego w formacie XML.

Pełne omówienie tworzenia pliku z 9 poprawkami z elastycznymi regionami znajdziesz w artykule Tworzenie mapy bitowej z możliwością zmiany rozmiaru (pliki z 9 poprawkami).

Plik dziewięciu poprawek

lokalizacja pliku:
res/drawable/filename.9.png
Nazwa pliku to identyfikator zasobu.
typ danych skompilowanych zasobów:
Wskaźnik zasobu do NinePatchDrawable
odniesienie do zasobów:
W Javie: R.drawable.filename
W pliku XML: @[package:]drawable/filename
przykład:
Gdy obraz został zapisany res/drawable/myninepatch.9.png, kod XML układu stosuje 9 poprawek do widoku:
<Button
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:background="@drawable/myninepatch" />
zobacz też:

Plik XML 9-patch

Plik XML 9-patch to zasób zdefiniowany w pliku XML, który wskazuje plik z dziewięcioma poprawkami. Kod XML może określać sposób identyfikacji obrazu.

lokalizacja pliku:
res/drawable/filename.xml
Nazwa pliku to identyfikator zasobu.
typ danych skompilowanych zasobów:
Wskaźnik zasobu do NinePatchDrawable
odniesienie do zasobów:
W Javie: R.drawable.filename
W pliku XML: @[package:]drawable/filename
składnia:
<?xml version="1.0" encoding="utf-8"?>
<nine-patch
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@[package:]drawable/drawable_resource"
    android:dither=["true" | "false"] />
elementy:
<nine-patch>
Wymagane. Definiuje źródło dziewięciu poprawek i jego właściwości.

Atrybuty:

xmlns:android
Ciąg znaków. Wymagane. Określa przestrzeń nazw XML. Musi to być "http://schemas.android.com/apk/res/android".
android:src
Zasób rysowalny. Wymagany. do pliku 9-poprawkowego.
android:dither
Wartość logiczna. Włącza lub wyłącza przyciemnianie bitmapy, jeśli bitmapa nie ma takiej samej konfiguracji pikseli jak ekran, np. mapa bitowa ARGB 8888 na ekranie RGB 565.
przykład:
<?xml version="1.0" encoding="utf-8"?>
<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/myninepatch"
    android:dither="false" />

Lista warstw

LayerDrawable to obiekt rysowalny, który służy do zarządzania tablicą innych elementów rysowalnych. Każdy element rysowany na liście jest rysowany w kolejności podanej na niej. Ostatni element, który można przeciągnąć na liście, jest rysowany na górze.

Każdy element rysowalny jest reprezentowany przez element <item> wewnątrz pojedynczego elementu <layer-list>.

lokalizacja pliku:
res/drawable/filename.xml
Nazwa pliku to identyfikator zasobu.
typ danych skompilowanych zasobów:
Wskaźnik zasobu do LayerDrawable
odniesienie do zasobów:
W Javie: R.drawable.filename
W pliku XML: @[package:]drawable/filename
składnia:
<?xml version="1.0" encoding="utf-8"?>
<layer-list
    xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@[package:]drawable/drawable_resource"
        android:id="@[+][package:]id/resource_name"
        android:top="dimension"
        android:right="dimension"
        android:bottom="dimension"
        android:left="dimension" />
</layer-list>
elementy:
<layer-list>
Wymagane. Musi to być element główny. Zawiera co najmniej 1 element <item>.

Atrybuty:

xmlns:android
Ciąg znaków. Wymagane. Określa przestrzeń nazw XML. Musi to być "http://schemas.android.com/apk/res/android".
<item>
Definiuje element, który można rysować, umieszczony w warstwie, w pozycji zdefiniowanej przez jego atrybuty. Musi być elementem podrzędnym elementu <layer-list>. Akceptuje podrzędne elementy <bitmap>.

Atrybuty:

android:drawable
Zasób rysowalny. Wymagany. odniesienie do zasobu, który można przeciągnąć.
android:id
Identyfikator zasobu. Unikalny identyfikator zasobu danego elementu rysowalnego. Aby utworzyć nowy identyfikator zasobu dla tego elementu, użyj formularza: "@+id/name". Symbol plusa oznacza, że identyfikator jest tworzony jako nowy. Możesz go używać do pobierania i modyfikowania elementu rysowalnego za pomocą View.findViewById() lub Activity.findViewById().
android:top
Wymiar. Przesunięcie od góry jako wartość wymiaru lub zasób wymiaru.
android:right
Wymiar. Przesunięcie od prawej jako wartość wymiaru lub zasób wymiaru.
android:bottom
Wymiar. Przesunięcie od dołu jako wartość wymiaru lub zasób wymiaru.
android:left
Wymiar. Przesunięcie od lewej jako wartość wymiaru lub zasób wymiaru.

Wszystkie elementy, które można rysować, są domyślnie skalowane tak, by pasowały do rozmiaru widoku. W związku z tym umieszczenie obrazów na liście warstw w różnych pozycjach może zwiększyć rozmiar widoku, a niektóre obrazy odpowiednio się skalują.

Aby uniknąć skalowania elementów na liście, użyj elementu <bitmap> wewnątrz elementu <item>, aby określić rysowalny i określić grawitację do takiego elementu, który nie jest skalowany, np. "center". Na przykład poniższy <item> określa element, który skaluje się tak, by pasował do widoku kontenera:

<item android:drawable="@drawable/image" />

Aby uniknąć skalowania, w tym przykładzie użyto elementu <bitmap> z wyśrodkowaną grawitacją:

<item>
  <bitmap android:src="@drawable/image"
          android:gravity="center" />
</item>
przykład:
Plik XML zapisany o res/drawable/layers.xml:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
      <bitmap android:src="@drawable/android_red"
        android:gravity="center" />
    </item>
    <item android:top="10dp" android:left="10dp">
      <bitmap android:src="@drawable/android_green"
        android:gravity="center" />
    </item>
    <item android:top="20dp" android:left="20dp">
      <bitmap android:src="@drawable/android_blue"
        android:gravity="center" />
    </item>
</layer-list>

W tym przykładzie użyto zagnieżdżonego elementu <bitmap> do zdefiniowania rysowalnych zasobów dla każdego elementu o ważności "center". Dzięki temu żaden z obrazów nie będzie skalowany tak, aby pasował do rozmiaru kontenera z powodu zmian rozmiaru spowodowanych przez obrazy przesunięcia.

Ten kod XML układu stosuje elementy rysowalne do widoku:

<ImageView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/layers" />

W efekcie powstaje stos obrazów coraz bardziej przesuniętych:

zobacz też:

Lista stanów

StateListDrawable to rysowalny obiekt zdefiniowany w pliku XML, który wykorzystuje wiele obrazów do reprezentowania tej samej grafiki w zależności od stanu obiektu. Możesz na przykład kliknąć stan widżetu Button, zaznaczyć go lub żadnego z nich. Za pomocą rysowalnej listy stanów możesz zapewnić różne obrazy tła dla poszczególnych stanów.

Listę stanów opisujesz w pliku XML. Każda grafika jest reprezentowana przez element <item> wewnątrz pojedynczego elementu <selector>. Każdy element <item> używa różnych atrybutów do opisania stanu, w którym jest używany jako obraz do rysowania.

Przy każdej zmianie stanu lista stanów jest przesuwana z góry do dołu i używany jest pierwszy element, który pasuje do bieżącego stanu. Wybór nie zależy od „najlepszego dopasowania”, ale na podstawie pierwszego elementu, który spełnia minimalne kryteria danego stanu.

lokalizacja pliku:
res/drawable/filename.xml
Nazwa pliku to identyfikator zasobu.
typ danych skompilowanych zasobów:
Wskaźnik zasobu do StateListDrawable
odniesienie do zasobów:
W Javie: R.drawable.filename
W pliku XML: @[package:]drawable/filename
składnia:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
    android:constantSize=["true" | "false"]
    android:dither=["true" | "false"]
    android:variablePadding=["true" | "false"] >
    <item
        android:drawable="@[package:]drawable/drawable_resource"
        android:state_pressed=["true" | "false"]
        android:state_focused=["true" | "false"]
        android:state_hovered=["true" | "false"]
        android:state_selected=["true" | "false"]
        android:state_checkable=["true" | "false"]
        android:state_checked=["true" | "false"]
        android:state_enabled=["true" | "false"]
        android:state_activated=["true" | "false"]
        android:state_window_focused=["true" | "false"] />
</selector>
elementy:
<selector>
Wymagane. Musi to być element główny. Zawiera co najmniej 1 element <item>.

Atrybuty:

xmlns:android
Ciąg znaków. Wymagane. Określa przestrzeń nazw XML. Musi to być "http://schemas.android.com/apk/res/android".
android:constantSize
Wartość logiczna. Wartość prawda, jeśli raportowany rozmiar elementu rysowalnego pozostaje taki sam podczas zmiany stanu (rozmiar jest maksymalnym ze wszystkich stanów). Wartość fałsz, jeśli rozmiar różni się w zależności od obecnego stanu. Wartość domyślna to false (fałsz).
android:dither
Wartość logiczna. Wartość prawda włącza przyciemnianie bitmapy, jeśli bitmapa nie ma takiej samej konfiguracji pikseli jak ekran, np. mapa bitowa ARGB 8888 na ekranie RGB 565, lub fałsz, aby wyłączyć przyciemnianie. Wartość domyślna to true (prawda).
android:variablePadding
Wartość logiczna. Wartość „prawda”, jeśli dopełnienie elementu rysowanego zmienia się w zależności od wybranego stanu. Wartość „fałsz”, jeśli dopełnienie musi pozostać takie samo, zgodnie z maksymalnym dopełnieniem wszystkich stanów. Włączenie tej funkcji wymaga obsługi układu wydajnego w przypadku zmiany stanu, co często nie jest obsługiwane. Wartość domyślna to false (fałsz).
<item>
Określa element, który można wykorzystać w określonych stanach zgodnie z jego atrybutami. Musi być elementem podrzędnym elementu <selector>.

Atrybuty:

android:drawable
Zasób rysowalny. Wymagany. Odniesienie do zasobu, który można przeciągnąć.
android:state_pressed
Wartość logiczna. Prawda, jeśli ten element jest używany po dotknięciu obiektu, np. po dotknięciu przycisku. Fałsz, jeśli ten element jest używany w domyślnym stanie nieklikniętym.
android:state_focused
Wartość logiczna. Prawda, jeśli ten element jest używany, gdy obiekt jest aktywny, np. gdy użytkownik wybiera dane wejściowe. Fałsz, jeśli ten element jest używany w domyślnym stanie bez zaznaczenia.
android:state_hovered
Wartość logiczna. Prawda, jeśli ten element jest używany po najechaniu kursorem na obiekt, fałsz, jeśli ten element jest używany w domyślnym stanie bez najechania. Ten element często może być taki sam jak w stanie „zaznaczony”.

Wprowadzona na poziomie API 14.

android:state_selected
Wartość logiczna. Wartość to „prawda”, jeśli ten element jest używany, gdy obiekt jest aktualnie wybranym przez użytkownika podczas nawigacji za pomocą sterowania kierunkowego, np. podczas poruszania się po liście za pomocą pada kierunkowego; wartość fałsz, jeśli ten element jest używany, gdy obiekt nie jest wybrany.

Wybrany stan jest używany, gdy ustawienie android:state_focused nie jest wystarczające, np. gdy aktywny jest widok listy, a element w nim został wybrany za pomocą pada kierunkowego.

android:state_checkable
Wartość logiczna. Prawda, jeśli ten element jest używany, gdy obiekt można wybrać. Fałsz, jeśli ten element jest używany, gdy obiektu nie można wybrać. Ta opcja jest przydatna tylko wtedy, gdy obiekt można przełączać się między widżetem z możliwością wyboru i innym.
android:state_checked
Wartość logiczna. Prawda, jeśli ten element jest używany, gdy obiekt jest zaznaczony. Fałsz, jeśli jest używany, gdy obiekt jest odznaczony.
android:state_enabled
Wartość logiczna. Wartość prawda, jeśli ten element jest używany, gdy obiekt jest włączony, czyli może odbierać zdarzenia kliknięcia lub kliknięcia. Fałsz, jeśli jest używany, gdy obiekt jest wyłączony.
android:state_activated
Wartość logiczna. Wartość to „prawda”, jeśli ten element jest używany, gdy obiekt jest aktywowany jako trwały wybór, np. w celu „podświetlenia” wybranego wcześniej elementu listy w stałym widoku nawigacji. Wartość fałsz, jeśli jest używana, gdy obiekt nie jest aktywowany.

Wprowadzona na poziomie API 11.

android:state_window_focused
Wartość logiczna. Prawda, jeśli ten element jest używany, gdy okno aplikacji jest aktywne, czyli aplikacja jest na pierwszym planie. Wartość false, jeśli ten element jest używany, gdy okno aplikacji nie jest zaznaczone, na przykład po opuszczeniu obszaru powiadomień lub wyświetleniu okna.

Uwaga: Android stosuje pierwszy element na liście stanów, który pasuje do bieżącego stanu obiektu. Jeśli więc pierwszy element na liście nie zawiera żadnego z poprzednich atrybutów stanu, jest on stosowany za każdym razem. Dlatego chcesz, aby wartość domyślna była zawsze ostatnia, jak pokazano w tym przykładzie.

przykład:
Plik XML zapisany o res/drawable/button.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:drawable="@drawable/button_pressed" /> <!-- pressed -->
    <item android:state_focused="true"
          android:drawable="@drawable/button_focused" /> <!-- focused -->
    <item android:state_hovered="true"
          android:drawable="@drawable/button_focused" /> <!-- hovered -->
    <item android:drawable="@drawable/button_normal" /> <!-- default -->
</selector>

Ten kod XML układu stosuje do przycisku listę stanów, którą można przeciągnąć:

<Button
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:background="@drawable/button" />
zobacz też:

Lista poziomów

Obiekt rysowalny, który zarządza szeregiem innych elementów. Każdy z nich ma przypisaną maksymalną wartość liczbową. Ustawienie wartości poziomu elementu rysowalnego za pomocą setLevel() wczytuje rysowalny zasób z listy poziomów, który ma wartość android:maxLevel większą lub równą wartości przekazanej metody.

lokalizacja pliku:
res/drawable/filename.xml
Nazwa pliku to identyfikator zasobu.
typ danych skompilowanych zasobów:
Wskaźnik zasobu do LevelListDrawable
odniesienie do zasobów:
W Javie: R.drawable.filename
W pliku XML: @[package:]drawable/filename
składnia:
<?xml version="1.0" encoding="utf-8"?>
<level-list
    xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@drawable/drawable_resource"
        android:maxLevel="integer"
        android:minLevel="integer" />
</level-list>
elementy:
<level-list>
Wymagane. Musi to być element główny. Zawiera co najmniej 1 element <item>.

Atrybuty:

xmlns:android
Ciąg znaków. Wymagane. Określa przestrzeń nazw XML. Musi to być "http://schemas.android.com/apk/res/android".
<item>
Zdefiniuj element, który można przeciągnąć na określonym poziomie.

Atrybuty:

android:drawable
Zasób rysowalny. Wymagany. Odniesienie do rysowalnego zasobu, który ma zostać wstawiony.
android:maxLevel
Liczba całkowita. Maksymalny dozwolony poziom tego elementu.
android:minLevel
Liczba całkowita. Minimalny dozwolony poziom tego elementu.
przykład:
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@drawable/status_off"
        android:maxLevel="0" />
    <item
        android:drawable="@drawable/status_on"
        android:maxLevel="1" />
</level-list>

Gdy zastosujesz ten parametr do View, poziom można zmienić za pomocą setLevel() lub setImageLevel().

zobacz też:

Przejście z możliwością rysowania

TransitionDrawable to rysowalny obiekt, który może przechodzić przez 2 inne rysowalne zasoby.

Każdy element rysowalny jest reprezentowany przez element <item> wewnątrz pojedynczego elementu <transition>. Obsługiwane są maksymalnie dwa elementy. Aby przejść dalej, zadzwoń pod numer startTransition(). Aby przejść wstecz, wywołaj reverseTransition().

lokalizacja pliku:
res/drawable/filename.xml
Nazwa pliku to identyfikator zasobu.
typ danych skompilowanych zasobów:
Wskaźnik zasobu do TransitionDrawable
odniesienie do zasobów:
W Javie: R.drawable.filename
W pliku XML: @[package:]drawable/filename
składnia:
<?xml version="1.0" encoding="utf-8"?>
<transition
xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@[package:]drawable/drawable_resource"
        android:id="@[+][package:]id/resource_name"
        android:top="dimension"
        android:right="dimension"
        android:bottom="dimension"
        android:left="dimension" />
</transition>
elementy:
<transition>
Wymagane. Musi to być element główny. Zawiera co najmniej 1 element <item>.

Atrybuty:

xmlns:android
Ciąg znaków. Wymagane. Określa przestrzeń nazw XML. Musi to być "http://schemas.android.com/apk/res/android".
<item>
Określa element, który można wykorzystać w ramach przejścia. Musi być elementem podrzędnym elementu <transition>. Akceptuje podrzędne elementy <bitmap>.

Atrybuty:

android:drawable
Zasób rysowalny. Wymagany. odniesienie do zasobu, który można przeciągnąć.
android:id
Identyfikator zasobu. Unikalny identyfikator zasobu danego elementu rysowalnego. Aby utworzyć nowy identyfikator zasobu dla tego elementu, użyj formularza: "@+id/name". Symbol plusa oznacza, że identyfikator jest tworzony jako nowy. Możesz go używać do pobierania i modyfikowania elementu rysowalnego za pomocą View.findViewById() lub Activity.findViewById().
android:top
Liczba całkowita. Przesunięcie od góry w pikselach.
android:right
Liczba całkowita. Przesunięcie od prawej w pikselach.
android:bottom
Liczba całkowita. Przesunięcie od dołu w pikselach.
android:left
Liczba całkowita. Przesunięcie od lewej w pikselach.
przykład:
Plik XML zapisany o res/drawable/transition.xml:
<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/on" />
    <item android:drawable="@drawable/off" />
</transition>

Ten kod XML układu stosuje elementy rysowalne do widoku:

<ImageButton
    android:id="@+id/button"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/transition" />

Ten kod wykonuje przejście od pierwszego do drugiego elementu w ciągu 500 ms:

Kotlin

val button: ImageButton = findViewById(R.id.button)
val drawable: Drawable = button.drawable
if (drawable is TransitionDrawable) {
    drawable.startTransition(500)
}

Java

ImageButton button = (ImageButton) findViewById(R.id.button);
Drawable drawable = button.getDrawable();
if (drawable instanceof TransitionDrawable) {
    ((TransitionDrawable) drawable).startTransition(500);
}
zobacz też:

Wstawiany element, który można rysować

Element rysowalny zdefiniowany w pliku XML, który umieszcza inny element rysowalny o określoną odległość. Jest to przydatne, gdy tło widoku jest mniejsze niż rzeczywiste granice widoku.

lokalizacja pliku:
res/drawable/filename.xml
Nazwa pliku to identyfikator zasobu.
typ danych skompilowanych zasobów:
Wskaźnik zasobu do InsetDrawable
odniesienie do zasobów:
W Javie: R.drawable.filename
W pliku XML: @[package:]drawable/filename
składnia:
<?xml version="1.0" encoding="utf-8"?>
<inset
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/drawable_resource"
    android:insetTop="dimension"
    android:insetRight="dimension"
    android:insetBottom="dimension"
    android:insetLeft="dimension" />
elementy:
<inset>
Wymagane. Definiuje element, który można rysować. Musi to być element główny.

Atrybuty:

xmlns:android
Ciąg znaków. Wymagane. Określa przestrzeń nazw XML. Musi to być "http://schemas.android.com/apk/res/android".
android:drawable
Zasób rysowalny. Wymagany. Odniesienie do rysowalnego zasobu, który ma zostać wstawiony.
android:insetTop
Wymiar. Ustawienie od góry jako wartość wymiaru lub zasób wymiaru.
android:insetRight
Wymiar. Właściwy początek jako wartość wymiaru lub zasób wymiaru.
android:insetBottom
Wymiar. Ustawienie u dołu jako wartość wymiaru lub zasób wymiaru.
android:insetLeft
Wymiar. Ustawienie po lewej stronie jako wartość wymiaru lub zasób wymiaru.
przykład:
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/background"
    android:insetTop="10dp"
    android:insetLeft="10dp" />
zobacz też:

Klips, który można przeciągnąć

Element rysowalny zdefiniowany w pliku XML, który przycina inny element rysowalny na podstawie jego bieżącego poziomu. Możesz kontrolować, jak bardzo element podrzędny, który można rysować, ma zostać przycięty w szerokości i wysokości w zależności od poziomu, a także ciężar, aby kontrolować, gdzie znajduje się element w kontenerze. Najczęściej służą do implementacji takich funkcji jak paski postępu.

lokalizacja pliku:
res/drawable/filename.xml
Nazwa pliku to identyfikator zasobu.
typ danych skompilowanych zasobów:
Wskaźnik zasobu do ClipDrawable
odniesienie do zasobów:
W Javie: R.drawable.filename
W pliku XML: @[package:]drawable/filename
składnia:
<?xml version="1.0" encoding="utf-8"?>
<clip
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/drawable_resource"
    android:clipOrientation=["horizontal" | "vertical"]
    android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
                     "fill_vertical" | "center_horizontal" | "fill_horizontal" |
                     "center" | "fill" | "clip_vertical" | "clip_horizontal"] />
elementy:
<clip>
Wymagane. Określa klip, który można rysować. Musi to być element główny.

Atrybuty:

xmlns:android
Ciąg znaków. Wymagane. Określa przestrzeń nazw XML. Musi to być "http://schemas.android.com/apk/res/android".
android:drawable
Zasób rysowalny. Wymagany. odniesienie do rysowalnego zasobu, który ma zostać obcięty.
android:clipOrientation
Słowo kluczowe. Orientacja klipu.

Musi to być jedna z następujących stałych wartości:

WartośćOpis
horizontal Przypnij element rysowalny poziomo.
vertical Przypnij element rysowalny w pionie.
android:gravity
Słowo kluczowe. Określa miejsce przycięcia w elemencie rysowalnym.

Musi to być co najmniej jedna z tych wartości stałych rozdzielonych znakiem |:

WartośćOpis
top Umieść obiekt na górze kontenera, nie zmieniając jego rozmiaru. Jeśli clipOrientation ma wartość "vertical", przycinanie występuje na dole elementu możliwego do rysowania.
bottom Umieść obiekt na dole kontenera, nie zmieniając jego rozmiaru. Jeśli clipOrientation ma wartość "vertical", przycinanie ma miejsce na górze elementu rysowalnego.
left Umieść obiekt na lewej krawędzi kontenera, nie zmieniając jego rozmiaru. Jest to wartość domyślna. Jeśli clipOrientation ma wartość "horizontal", przycinanie następuje po prawej stronie elementu, który można przeciągnąć.
right Umieść obiekt na prawej krawędzi kontenera, nie zmieniając jego rozmiaru. Jeśli clipOrientation ma wartość "horizontal", przycinanie następuje po lewej stronie elementu, który można rysować.
center_vertical Umieść obiekt na środku kontenera w pionie, nie zmieniając jego rozmiaru. Przycinanie działa tak samo jak wtedy, gdy grawitacja ma wartość "center".
fill_vertical W razie potrzeby zwiększ rozmiar obiektu w pionie, tak aby całkowicie wypełnił kontener. Jeśli element clipOrientation ma wartość "vertical", przycinanie nie jest wykonywane, ponieważ element rysowalny wypełnia przestrzeń pionową (chyba że rysowalny poziom to 0, w takim przypadku element nie jest widoczny).
center_horizontal Umieść obiekt na środku kontenera w poziomie, nie zmieniając jego rozmiaru. Przycinanie działa tak samo jak wtedy, gdy grawitacja wynosi "center".
fill_horizontal W razie potrzeby zwiększ rozmiar obiektu w poziomie, aby w pełni wypełnił kontener. Gdy clipOrientation ma wartość "horizontal", przycinanie nie jest wykonywane, ponieważ element, który można rysować, wypełnia przestrzeń poziomą (chyba że rysowalny poziom to 0, w takim przypadku element nie jest widoczny).
center Umieść obiekt na środku kontenera zarówno na osi pionowej, jak i poziomej, nie zmieniając jego rozmiaru. Jeśli clipOrientation ma wartość "horizontal", przycinanie występuje po lewej i prawej stronie. Jeśli clipOrientation ma wartość "vertical", przycinanie występuje na górze i na dole.
fill W razie potrzeby zwiększ rozmiar obiektu w poziomie i pionie, tak aby całkowicie wypełnił kontener. Przycinanie nie występuje, ponieważ element, który można przeciągnąć, wypełnia przestrzeń poziomą i pionową (chyba że rysowalny poziom ma wartość 0, w takim przypadku element nie jest widoczny).
clip_vertical Dodatkowa opcja, dzięki której górne lub dolne krawędzie elementu podrzędnego zostaną przycięte do granic kontenera. Klip jest uzależniony od grawitacji pionowej: gdy grawitacja górna jest ścięta, dolna granica jest odcięta, a dolna – od górnej krawędzi, a żadna z nich nie obcina obydwu krawędzi.
clip_horizontal Dodatkowa opcja, dzięki której lewe lub prawe krawędzie elementu podrzędnego zostaną przycięte do granic kontenera. Klip jest uzależniony od grawitacji poziomej: lewa – prawa – prawa, – prawa – lewa – lewa – obie.
przykład:
Plik XML zapisany o res/drawable/clip.xml:
<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/android"
    android:clipOrientation="horizontal"
    android:gravity="left" />

W tym układzie XML klip, który można rysować, jest stosowany do widoku:

<ImageView
    android:id="@+id/image"
    android:src="@drawable/clip"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content" />

Poniższy kod umożliwia rysowanie i zwiększa ilość przycinania w celu stopniowego wyświetlania obrazu:

Kotlin

val imageview: ImageView = findViewById(R.id.image)
val drawable: Drawable = imageview.background
if (drawable is ClipDrawable) {
    drawable.level = drawable.level + 1000
}

Java

ImageView imageview = (ImageView) findViewById(R.id.image);
Drawable drawable = imageview.getBackground();
if (drawable instanceof ClipDrawable) {
    ((ClipDrawable)drawable).setLevel(drawable.getLevel() + 1000);
}

Zwiększenie poziomu zmniejsza ilość przycinania i powoli ujawnia obraz. Tutaj jest na poziomie 7000:

Uwaga: domyślny poziom to 0, który jest całkowicie ucięty, dzięki czemu obraz nie jest widoczny. Przy poziomie 10 000 obraz nie jest przycinany i jest widoczny w całości.

zobacz też:

Skaluj rysowalne

Element rysowalny zdefiniowany w pliku XML, który zmienia rozmiar innego elementu rysowalnego na podstawie jego bieżącego poziomu.

lokalizacja pliku:
res/drawable/filename.xml
Nazwa pliku to identyfikator zasobu.
typ danych skompilowanych zasobów:
Wskaźnik zasobu do ScaleDrawable
odniesienie do zasobów:
W Javie: R.drawable.filename
W pliku XML: @[package:]drawable/filename
składnia:
<?xml version="1.0" encoding="utf-8"?>
<scale
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/drawable_resource"
    android:scaleGravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
                          "fill_vertical" | "center_horizontal" | "fill_horizontal" |
                          "center" | "fill" | "clip_vertical" | "clip_horizontal"]
    android:scaleHeight="percentage"
    android:scaleWidth="percentage" />
elementy:
<scale>
Wymagane. Określa skalę, którą można przeciągnąć. Musi to być element główny.

Atrybuty:

xmlns:android
Ciąg znaków. Wymagane. Określa przestrzeń nazw XML. Musi to być "http://schemas.android.com/apk/res/android".
android:drawable
Zasób rysowalny. Wymagany. odniesienie do zasobu, który można przeciągnąć.
android:scaleGravity
Słowo kluczowe. Określa pozycję grawitacji po przeskalowaniu.

Musi to być co najmniej jedna z tych wartości stałych rozdzielonych znakiem |:

WartośćOpis
top Umieść obiekt na górze kontenera, nie zmieniając jego rozmiaru.
bottom Umieść obiekt na dole kontenera, nie zmieniając jego rozmiaru.
left Umieść obiekt na lewej krawędzi kontenera, nie zmieniając jego rozmiaru. Jest to wartość domyślna.
right Umieść obiekt na prawej krawędzi kontenera, nie zmieniając jego rozmiaru.
center_vertical Umieść obiekt na środku kontenera w pionie, nie zmieniając jego rozmiaru.
fill_vertical W razie potrzeby zwiększ rozmiar obiektu w pionie, tak aby całkowicie wypełnił kontener.
center_horizontal Umieść obiekt na środku kontenera w poziomie, nie zmieniając jego rozmiaru.
fill_horizontal W razie potrzeby zwiększ rozmiar obiektu w poziomie, aby w pełni wypełnił kontener.
center Umieść obiekt na środku kontenera zarówno na osi pionowej, jak i poziomej, nie zmieniając jego rozmiaru.
fill W razie potrzeby zwiększ rozmiar obiektu w poziomie i pionie, tak aby całkowicie wypełnił kontener.
clip_vertical Dodatkowa opcja, dzięki której górne lub dolne krawędzie elementu podrzędnego zostaną przycięte do granic kontenera. Klip jest uzależniony od grawitacji pionowej: gdy grawitacja górna jest ścięta, dolna granica jest odcięta, a dolna – od górnej krawędzi, a żadna z nich nie obcina obydwu krawędzi.
clip_horizontal Dodatkowa opcja, dzięki której lewe lub prawe krawędzie elementu podrzędnego zostaną przycięte do granic kontenera. Klip jest uzależniony od grawitacji poziomej: lewa – prawa – prawa, – prawa – lewa – lewa – obie.
android:scaleHeight
Wartość procentowa. Wysokość skali wyrażona jako procent granicy elementu, który można przeciągnąć. Format tej wartości to XX%, np.100% lub 12,5%.
android:scaleWidth
Wartość procentowa. Szerokość skali wyrażona jako procent granicy elementu, który można przeciągnąć. Format tej wartości to XX%, np.100% lub 12,5%.
przykład:
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/logo"
    android:scaleGravity="center_vertical|center_horizontal"
    android:scaleHeight="80%"
    android:scaleWidth="80%" />
zobacz też:

Kształt, który można rysować

To ogólny kształt zdefiniowany w pliku XML.

lokalizacja pliku:
res/drawable/filename.xml
Nazwa pliku to identyfikator zasobu.
typ danych skompilowanych zasobów:
Wskaźnik zasobu do GradientDrawable
odniesienie do zasobów:
W Javie: R.drawable.filename
W pliku XML: @[package:]drawable/filename
składnia:
<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape=["rectangle" | "oval" | "line" | "ring"] >
    <corners
        android:radius="integer"
        android:topLeftRadius="integer"
        android:topRightRadius="integer"
        android:bottomLeftRadius="integer"
        android:bottomRightRadius="integer" />
    <gradient
        android:angle="integer"
        android:centerX="float"
        android:centerY="float"
        android:centerColor="integer"
        android:endColor="color"
        android:gradientRadius="integer"
        android:startColor="color"
        android:type=["linear" | "radial" | "sweep"]
        android:useLevel=["true" | "false"] />
    <padding
        android:left="integer"
        android:top="integer"
        android:right="integer"
        android:bottom="integer" />
    <size
        android:width="integer"
        android:height="integer" />
    <solid
        android:color="color" />
    <stroke
        android:width="integer"
        android:color="color"
        android:dashWidth="integer"
        android:dashGap="integer" />
</shape>
elementy:
<shape>
Wymagane. Kształt, który można rysować. Musi to być element główny.

Atrybuty:

xmlns:android
Ciąg znaków. Wymagane. Określa przestrzeń nazw XML. Musi to być "http://schemas.android.com/apk/res/android".
android:shape
Słowo kluczowe. Określa typ kształtu. Prawidłowe wartości to:
WartośćOpis
"rectangle" Prostokąt wypełniający widok. To domyślny kształt.
"oval" Kształt owalny pasujący do wymiarów widoku nadrzędnego.
"line" Pozioma linia rozciągająca się na szerokość zawartego w nim widoku. Ten kształt wymaga elementu <stroke> określającego szerokość linii.
"ring" Kształt pierścienia.

Poniższe atrybuty są używane tylko wtedy, gdy android:shape="ring":

android:innerRadius
Wymiar. Promień wewnętrznej części pierścienia (otwór w środku) jako wartość wymiaru lub zasób wymiaru.
android:innerRadiusRatio
Pływające. Promień wewnętrznej części pierścienia, wyrażony jako stosunek szerokości pierścienia. Jeśli na przykład ustawisz android:innerRadiusRatio="5", promień wewnętrzny to szerokość pierścienia podzielona przez 5. Ta wartość została zastąpiona przez android:innerRadius. Wartością domyślną jest 9.
android:thickness
Wymiar. Grubość pierścienia jako wartość wymiaru lub zasób wymiaru.
android:thicknessRatio
Pływające. Grubość pierścienia wyrażona jako stosunek jego szerokości. Jeśli np. ustawisz android:thicknessRatio="2", grubość pierścienia jest równa szerokości pierścienia podzielonej przez 2. Ta wartość została zastąpiona przez android:innerRadius. Wartością domyślną jest 3.
android:useLevel
Wartość logiczna. Prawda, jeśli jest używany jako LevelListDrawable. Zwykle ma wartość fałsz. W przeciwnym razie kształt może się nie pojawić.
<corners>
Utworzy zaokrąglone narożniki kształtu. Ma zastosowanie tylko wtedy, gdy kształt jest prostokątny.

Atrybuty:

android:radius
Wymiar. Promień wszystkich narożników, jako wartość wymiaru lub zasób wymiaru. W przypadku każdego rogu jest zastępowane tymi atrybutami.
android:topLeftRadius
Wymiar. Promień lewego górnego rogu jako wartość wymiaru lub zasób wymiaru.
android:topRightRadius
Wymiar. Promień prawego górnego rogu ekranu jako wartość wymiaru lub zasób wymiaru.
android:bottomLeftRadius
Wymiar. Promień lewego dolnego rogu jako wartość wymiaru lub zasób wymiaru.
android:bottomRightRadius
Wymiar. Promień prawego dolnego rogu jako wartość wymiaru lub zasób wymiaru.

Uwaga: dla każdego narożnika należy początkowo podać promień narożnika większy niż 1. W przeciwnym razie narożniki nie będą zaokrąglane. Jeśli chcesz, by określone narożniki nie były zaokrąglane, możesz skorzystać z metody android:radius, by ustawić domyślny promień narożników większy niż 1, a następnie zastąpić każdy narożnik wartościami, które Ci odpowiadają, podając wartość 0 („0dp”), tam, gdzie rogi nie mają być zaokrąglone.

<gradient>
Określa kolor gradientu kształtu.

Atrybuty:

android:angle
Liczba całkowita. Kąt gradientu (w stopniach). 0 od lewej do prawej, 90 to od dołu do góry. Musi to być wielokrotność liczby 45. Wartość domyślna to 0.
android:centerX
Pływające. Względna pozycja X środka gradientu (0–1,0).
android:centerY
Pływające. Względna pozycja Y względem środka gradientu (0–1,0).
android:centerColor
Kolor. Opcjonalny kolor między kolorem początkowym i końcowym, podany jako wartość szesnastkowa lub zasób koloru.
android:endColor
Kolor. Kolor końcowy jako wartość szesnastkowa lub zasób koloru.
android:gradientRadius
Pływające. Promień gradientu. Stosowane tylko wtedy, gdy android:type="radial".
android:startColor
Kolor. Kolor początkowy jako wartość szesnastkowa lub zasób koloru.
android:type
Słowo kluczowe. Typ wzorca gradientu, który ma zostać zastosowany. Prawidłowe wartości to:
WartośćOpis
"linear" Gradient liniowy. Jest to ustawienie domyślne.
"radial" Gradient promienisty. Kolor początkowy to kolor pośrodku.
"sweep" Gradient linii.
android:useLevel
Wartość logiczna. Prawda, jeśli jest używana jako LevelListDrawable.
<padding>
Dopełnienie, które ma zostać zastosowane do elementu widoku zawierającego ten element. Powoduje to wyrównanie położenia zawartości widoku, a nie kształtu.

Atrybuty:

android:left
Wymiar. Dopełnienie lewe jako wartość wymiaru lub zasób wymiaru.
android:top
Wymiar. Dopełnienie u góry jako wartość wymiaru lub zasób wymiaru.
android:right
Wymiar. Dopełnienie prawe jako wartość wymiaru lub zasób wymiaru.
android:bottom
Wymiar. Dopełnienie u dołu jako wartość wymiaru lub zasób wymiaru.
<size>
Rozmiar kształtu.

Atrybuty:

android:height
Wymiar. Wysokość kształtu jako wartość wymiaru lub zasób wymiaru.
android:width
Wymiar. Szerokość kształtu jako wartości wymiaru lub zasobu wymiaru.

Uwaga: domyślnie kształt skaluje się do rozmiaru widoku kontenera proporcjonalnie do wymiarów zdefiniowanych w tym miejscu. Jeśli używasz kształtu w ImageView, możesz ograniczyć skalowanie, ustawiając android:scaleType na "center".

<solid>
Jednolity kolor wypełniając kształt.

Atrybuty:

android:color
Kolor. Kolor, który ma zostać zastosowany do kształtu, w postaci wartości szesnastkowej lub zasobu koloru.
<stroke>
Linia przerywana kształtu.

Atrybuty:

android:width
Wymiar. Grubość linii jako wartość wymiaru lub zasób wymiaru.
android:color
Kolor. Kolor linii jako wartość szesnastkowa lub zasób koloru.
android:dashGap
Wymiar. Odległość między kreskami linii jako wartość wymiaru lub zasób wymiaru. Tej opcji można użyć tylko wtedy, gdy ustawiona jest wartość android:dashWidth.
android:dashWidth
Wymiar. Rozmiar każdej linii przerywanej jako wartość wymiaru lub zasób wymiaru. Tej opcji można użyć tylko wtedy, gdy ustawiona jest wartość android:dashGap.
przykład:
Plik XML zapisany o res/drawable/gradient_box.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:startColor="#FFFF0000"
        android:endColor="#80FF00FF"
        android:angle="45"/>
    <padding android:left="7dp"
        android:top="7dp"
        android:right="7dp"
        android:bottom="7dp" />
    <corners android:radius="8dp" />
</shape>

Ten kod XML układu stosuje kształt, który można rysować w widoku:

<TextView
    android:background="@drawable/gradient_box"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content" />

Ten kod aplikacji umożliwia rysowanie kształtu i stosuje go w widoku danych:

Kotlin

val shape: Drawable? = getDrawable(resources, R.drawable.gradient_box, getTheme())

val tv: TextView = findViewById(R.id.textview)
tv.background = shape

Java

Resources res = getResources();
Drawable shape = ResourcesCompat.getDrawable(res, R.drawable.gradient_box, getTheme());

TextView tv = (TextView)findViewById(R.id.textview);
tv.setBackground(shape);
zobacz też: