Zasoby rysowalne

Zasób rysowalny to ogólna koncepcja grafiki, którą można narysować na ekranie. można pobrać za pomocą interfejsów API, takich jak getDrawable(int), lub do innego zasobu XML o takich atrybutach jak android:drawable i android:icon. Jest kilka rodzajów elementów, które można przeciągać:

Plik bitmapowy
Plik graficzny z bitmapą (PNG, WEBP, JPG lub GIF). Tworzy BitmapDrawable.
Plik dziewięć poprawek
Plik PNG z rozciąganymi obszarami, które pozwalają zmieniać rozmiar obrazów odpowiednio do treści (.9.png). Tworzy NinePatchDrawable.
Lista warstw
Element rysowalny, który zarządza tablicą innych obiektów rysowalnych. Są one rysowane w kolejności tablicy, więc na początku jest rysowany element o największym indeksie. Tworzy LayerDrawable.
Lista stanów
Plik XML odwołujący się do innej grafiki bitmapowej dla różnych stanów, aby na przykład użyć innego obrazu po naciśnięciu przycisku. Tworzy StateListDrawable.
Lista poziomów
Plik XML definiujący element rysowalny, który zarządza licznymi alternatywnymi elementami, z których każdy mają przypisaną maksymalną wartość liczbową. Tworzy LevelListDrawable.
Przejście z możliwością rysowania
Plik XML określający obiekt rysowalny, który może przełączać się między 2 zasobami rysowalnymi. Tworzy TransitionDrawable.
Wektor rysowalny
Plik XML określający obiekt rysowalny, który wstawia inny obiekt rysowalny o określonej odległości. Jest to przydatne, gdy w widoku trzeba narysować tło mniejsze niż rzeczywisty granic.
Klip, który można rysować
Plik XML określający element rysowalny, który przycina kolejny obiekt rysowalny na podstawie obiektu bieżącej wartości. Tworzy ClipDrawable.
Skala rysowalna
Plik XML definiujący element rysowalny, który zmienia rozmiar innego obiektu, w zależności od jego bieżącej wartości. Tworzy ScaleDrawable
Kształt rysowalny.
Plik XML określający kształt geometryczny, w tym kolory i gradienty. Tworzy GradientDrawable.

Dowiedz się, jak utwórz: AnimationDrawable, zobacz dokument Zasoby animacji.

Uwaga: zasób kolorów może być też używany jako obiekt rysowalny w kodzie XML. Na przykład podczas tworzenia listy stanów obiekt rysowalny, możesz odwoływać się do zasobu koloru dla atrybutu android:drawable (android:drawable="@color/green").

Bitmapa

Obraz bitmapy. Android obsługuje pliki mapy bitowej w tych formatach: PNG (preferowany), WEBP (preferowany, wymaga interfejsu API na poziomie 17 lub wyższym), JPG (akceptowalny), GIF (zalecany).

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 bitmap mogą być automatycznie optymalizowane w formacie bezstratnym kompresję obrazu za pomocą narzędzia aapt. Dla: Na przykład plik PNG o prawdziwym kolorze, który nie wymaga więcej niż 256 kolorów, może zostać przekonwertowany na 8-bitowy. PNG z paletą kolorów. W ten sposób uzyskujesz obraz o takiej samej jakości, który wymaga mniej pamięci.

Pamiętaj więc, że pliki binarne obrazów umieszczone w tym katalogu mogą się zmieniać podczas kompilacji. Jeśli Planujesz odczytać obraz jako strumień bitowy, aby przekonwertować go na bitmapę, folder res/raw/, który nie jest zoptymalizowany.

Plik bitmapy

Plik bitmapy to plik w formacie PNG, WEBP, JPG lub GIF. Android tworzy Drawable w dowolnym z tych plików po zapisaniu ich w katalogu res/drawable/.

lokalizacja pliku:
res/drawable/filename.png (.png, .webp, .jpg lub .gif)
Nazwa pliku to identyfikator zasobu
skompilowany typ danych zasobu:
Wskaźnik zasobu BitmapDrawable
odniesienie do zasobu:
W języku Java: R.drawable.filename
W pliku XML: @[package:]drawable/filename
przykład:
Z obrazem zapisanym pod adresem res/drawable/myimage.png zastosowano ten układ XML obraz w widoku:
<ImageView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/myimage" />

Ten kod aplikacji pobiera obraz w postaci pliku 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ż:

Bitmapa XML

Bitmapa XML to zasób zdefiniowany w kodzie XML, który wskazuje plik bitmapy. Efekt to alias dla nieprzetworzonego pliku bitmapy. Plik XML może określać dodatkowe właściwości bitmapy, takie jak dithering i kafelki.

Uwaga: elementu <bitmap> możesz używać jako elementu podrzędnego element <item>. Dla: np. podczas tworzenia listy stanów lub listy warstw, możesz wykluczyć android:drawable z elementu <item> i zagnieździć w nim element <bitmap>. definiujący element rysowalny.

lokalizacja pliku:

res/drawable/filename.xml(
) Nazwa pliku to identyfikator zasobu
skompilowany typ danych zasobu:
Wskaźnik zasobu BitmapDrawable
odniesienie do zasobu:
W języku Java: 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 mapy bitowej i jego właściwości.

Atrybuty:

xmlns:android
Ciąg znaków. Definiuje przestrzeń nazw XML, którą musi być "http://schemas.android.com/apk/res/android" Jest to wymagane tylko wtedy, gdy Elementem głównym jest <bitmap>. Nie jest potrzebny, gdy Element <bitmap> jest zagnieżdżony w elemencie <item>.
android:src
Zasób rysowalny. Wymagany. Odniesienie do elementu rysowalnego .
android:antialias
Wartość logiczna. Włącza lub wyłącza antyaliasing.
android:dither
Wartość logiczna. Włącza lub wyłącza rozpraszanie bitmapy, jeśli nie jest to możliwe mają taką samą konfigurację pikseli jak ekran, na przykład mapę bitową ARGB 8888 na modelu RGB 565. ekranu.
android:filter
Wartość logiczna. Włącza lub wyłącza filtrowanie bitmapy. Filtrowanie jest używane, gdy bitmapa jest zmniejszona lub rozciągnięta w celu wygładzenia.
android:gravity
Słowo kluczowe. Definiuje grawitację dla bitmapy. Grawitacja wskazuje, gdzie umieść obiekt rysowalny w kontenerze, jeśli mapa bitowa 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 przy lewej krawędzi kontenera, nie zmieniając jego rozmiaru.
right Umieść obiekt przy 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 pionowy rozmiar obiektu, aby wypełnił cały kontener.
center_horizontal Umieść obiekt na środku kontenera w poziomie, nie zmieniając jego rozmiaru.
fill_horizontal W razie potrzeby powiększ obiekt w poziomie, aby wypełnił cały kontener.
center Umieść obiekt na środku kontenera na osi pionowej i poziomej, i jego rozmiaru.
fill W razie potrzeby zwiększ rozmiar obiektu w poziomie i pionie, aby wypełnił cały obszar kontenera. Jest to ustawienie domyślne.
clip_vertical Dodatkowa opcja, w ramach której można przyciąć górne lub dolne krawędzie elementu podrzędnego granic swojego kontenera. Klip jest oparty na grawitacji pionowej: górna grawitacja przycina dolna krawędź grawitacja przycina górną, ale żadna z nich nie przycina obu.
clip_horizontal Dodatkowa opcja, w ramach której można przyciąć lewe lub prawe krawędzie elementu podrzędnego granic swojego kontenera. Klip jest oparty na grawitacji poziomej: lewa grawitacja prawa grawitacja przycina lewą krawędź, ale żadna z nich nie przycina obu.
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 kafelka. Gdy włączony jest tryb kafelków, bitmapa jest powtórzenia. Grawitacja jest ignorowana po włączeniu trybu kafelka.

Musi mieć jedną z tych stałych wartości:

WartośćOpis
disabled Nie kafelkuj bitmapy. jest to wartość domyślna
clamp Replikuj kolor krawędzi, jeśli cieniowanie wykracza poza pierwotne granice
repeat Powtórz obraz cieniowania w poziomie i pionie.
mirror Powtórz obraz w cieniu w poziomie i pionie, naprzemienne lustrzane odbicia. sąsiednie obrazy są zawsze łączone.
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ż:

9 poprawek

NinePatch to obraz PNG, w którym można zdefiniować obszary rozciągane które Android skaluje, gdy zawartość widoku wykracza poza normalne granice obrazu. Ty zazwyczaj przypisują ten typ obrazu jako tło widoku, który ma co najmniej jeden zestaw wymiarów do "wrap_content".

Gdy widok powiększa się w celu dopasowania do treści, pojawia się jest również skalowany do rozmiaru widoku. Przykładem użycia obrazu z 9 poprawkami jest tło używane przez standardowy widżet Button na Androida, który musi się rozciągać do umieść tekst (lub obraz) wewnątrz przycisku.

Tak jak w przypadku zwykłej bitmapy, możesz odwoływać się bezpośrednio do pliku z 9 poprawkami lub z zasobu zdefiniowanego przez kod XML.

Pełną dyskusję na temat tworzenia pliku z dziewięcioma poprawkami z rozciąganymi regionami Zobacz Tworzenie map bitowych z możliwością zmiany rozmiaru (pliki z 9 poprawkami).

Plik z 9 poprawkami

lokalizacja pliku:

res/drawable/filename.9.png(
) Nazwa pliku to identyfikator zasobu
skompilowany typ danych zasobu:
Wskaźnik zasobu NinePatchDrawable
odniesienie do zasobu:
W języku Java: R.drawable.filename
W pliku XML: @[package:]drawable/filename
przykład:
Z obrazem zapisanym o res/drawable/myninepatch.9.png, ten układ XML stosuje dziewięć poprawek do widoku:
<Button
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:background="@drawable/myninepatch" />
zobacz też:

9-poprawka XML

Kod XML „9-patch” to zasób zdefiniowany w kodzie XML, który wskazuje plik z 9 poprawkami. Plik XML może i określać Dithering dla obrazu.

lokalizacja pliku:

res/drawable/filename.xml(
) Nazwa pliku to identyfikator zasobu
skompilowany typ danych zasobu:
Wskaźnik zasobu NinePatchDrawable
odniesienie do zasobu:
W języku Java: 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 z 9 poprawkami i jego właściwości.

Atrybuty:

xmlns:android
Ciąg znaków. Wymagane. Definiuje przestrzeń nazw XML, którą musi być "http://schemas.android.com/apk/res/android"
android:src
Zasób rysowalny. Wymagany. Odniesienie do dziewięciu poprawek .
android:dither
Wartość logiczna. Włącza lub wyłącza rozpraszanie bitmapy, jeśli nie jest to możliwe mają taką samą konfigurację pikseli jak ekran, na przykład mapę bitową ARGB 8888 na modelu RGB 565. ekranu.
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

Obiekt LayerDrawable to obiekt rysowalny który zarządza tablicą innych elementów narysowanych. Każdy element rysowalny na liście jest rysowany w kolejności z listy. Ostatni obiekt rysowalny na liście jest rysowany na początku.

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

lokalizacja pliku:

res/drawable/filename.xml(
) Nazwa pliku to identyfikator zasobu
skompilowany typ danych zasobu:
Wskaźnik zasobu LayerDrawable
odniesienie do zasobu:
W języku Java: 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. Definiuje przestrzeń nazw XML, którą musi być "http://schemas.android.com/apk/res/android"
<item>
Określa element, który można rysować w warstwie, którą można rysować, w pozycji określonej przez jego atrybuty. Musi być elementem podrzędnym elementu <layer-list>. Akceptuje podrzędne <bitmap> .

Atrybuty:

android:drawable
Zasób rysowalny. Wymagany. Odniesienie do elementu rysowalnego .
android:id
Identyfikator zasobu. Unikalny identyfikator zasobu tego elementu rysowanego. Tworzenie nowego zasobu Identyfikator tego produktu, użyj formularza: "@+id/name" Symbol plusa oznacza, że jest ona utworzona jako nowy ID. Za pomocą tego identyfikatora możesz pobierz i zmodyfikuj obiekt rysowalny za pomocą funkcji View.findViewById() lub Activity.findViewById().
android:top
Wymiar. Przesunięcie od góry jako wartość wymiaru lub zasób wymiaru.
android:right
Wymiar. Odpowiednie przesunięcie jako wartość wymiaru lub zasób wymiaru.
android:bottom
Wymiar. Przesunięcie do dołu jako wartość wymiaru lub zasób wymiaru.
android:left
Wymiar. Przesunięcie od lewej jako wartość wymiaru lub zasób wymiaru.

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

Aby unikać skalowania elementów na liście należy użyć elementu <bitmap> wewnątrz elementu <item>, aby określić obiekt rysowalny i zdefiniować grawitację elementu, który nie jest rysowany skalę, taką jak "center". Na przykład <item> definiuje element który skaluje się, by dopasować się do widoku kontenera:

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

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

<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 do zdefiniowania elementu rysowalnego w tym przykładzie użyto zagnieżdżonego elementu <bitmap> dla każdego elementu o grawitacji "center". Dzięki temu żaden z obrazów nie będzie skalowany do rozmiaru kontenera ze względu na zmiany rozmiaru spowodowane przez obrazy przesunięcia.

Ten kod XML układu stosuje obiekt rysowalny do widoku:

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

Powstały stos obrazów coraz bardziej przesuniętych stron:

zobacz też:

Lista stanów

Obiekt StateListDrawable to obiekt rysowalny zdefiniowany w kodzie XML. który korzysta z wielu obrazów do reprezentowania tej samej grafiki, w zależności od stanu obiektu. Stan widżetu Button można na przykład kliknąć, zaznaczyć lub żaden z nich; za pomocą rysowania listy stanów dla każdego z nich stanu.

Listę stanów opisujesz w pliku XML. Każda grafika jest reprezentowana przez element <item> wewnątrz jednego elementu <selector>. Co <item> wykorzystuje różne atrybuty, aby opisać stan, w jakim jest używany jako element graficzny obiekt rysowalny.

Podczas każdej zmiany stanu lista stanów jest przesuwana od góry do dołu. Pierwszy element, który pasuje do bieżącego stanu. Wybór nie opiera się na „najlepszym” pasuje”, ale raczej pierwszy element, który spełnia minimalne kryteria obowiązujące w danym stanie.

lokalizacja pliku:

res/drawable/filename.xml(
) Nazwa pliku to identyfikator zasobu
skompilowany typ danych zasobu:
Wskaźnik zasobu StateListDrawable
odniesienie do zasobu:
W języku Java: 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. Definiuje przestrzeń nazw XML, którą musi być "http://schemas.android.com/apk/res/android"
android:constantSize
Wartość logiczna. Prawda, jeśli zgłoszony rozmiar wewnętrzny obiektu rysowania pozostaje na stałym poziomie jako stan zmiany (rozmiar jest maksymalnym rozmiarem dla wszystkich stanów); false, jeśli rozmiar różni się w zależności od do bieżącego stanu. Wartość domyślna to false (fałsz).
android:dither
Wartość logiczna. Prawda, aby włączyć dithering bitmapy, jeśli bitmapa nie ma takiego samego piksela konfigurację jako ekran, na przykład mapę bitową ARGB 8888 na ekranie RGB 565; fałsz na wyłączyć dithering. Wartość domyślna to true (prawda).
android:variablePadding
Wartość logiczna. Prawda, jeśli dopełnienie elementu rysowanego zmienia się w zależności od bieżącego w wybranym stanie; Wartość false, jeśli dopełnienie musi pozostać takie samo w oparciu o maksymalną ze wszystkimi stanami. Aby włączyć tę funkcję, musisz uporać się z wykonywanie układu przy zmianie stanu, co często nie jest obsługiwane. Wartość domyślna to false (fałsz).
<item>
Definiuje element rysowalny do użycia w określonych stanach, zgodnie z jego atrybutami. Musi to być element podrzędny elementu <selector>.

Atrybuty:

android:drawable
Zasób rysowalny. Wymagany. Odwołanie do zasobu rysowalnego.
android:state_pressed
Wartość logiczna. Prawda, jeśli ten element jest używany po dotknięciu obiektu (np. przycisk). poruszony; false, jeśli ten element jest używany domyślnie, bez kliknięcia.
android:state_focused
Wartość logiczna. Prawda, jeśli ten element jest używany, gdy obiekt jest zaznaczony przy użyciu danych wejściowych, np. gdy użytkownik wybierze pole tekstowe. false, jeśli ten element jest używany domyślnie, i stan niezaznaczony.
android:state_hovered
Wartość logiczna. Prawda, jeśli ten element jest używany po najechaniu na niego kursorem. false, jeśli ten element jest używany w domyślnym stanie innym niż najechanie. Często Element rysowalny może być tym samym obiektem rysowanym użytym jako obiekt rysowalny. stanu.

Wprowadzono w interfejsie API poziomu 14.

android:state_selected
Wartość logiczna. Prawda, jeśli ten element jest używany, gdy obiekt jest bieżącym wybór użytkownika podczas nawigacji za pomocą sterowania kierunkowego, na przykład podczas poruszania się po liście padem kierunkowym. false, jeśli ten element jest używany, gdy obiekt nie jest zaznaczony.

Wybrany stan jest używany, gdy android:state_focused nie jest wystarczający, np. gdy aktywny jest widok listy i element w nim jest zaznaczony za pomocą pada kierunkowego.

android:state_checkable
Wartość logiczna. Prawda, jeśli ten element jest używany, gdy można go wybrać. false, jeśli jest używany, gdy obiektu nie można wybrać. Przydatny tylko wtedy, gdy obiekt może przejście między widżetem, który można wybrać lub którego nie można wybrać.
android:state_checked
Wartość logiczna. Prawda, jeśli ten element jest używany, gdy obiekt jest zaznaczony. Wartość false (fałsz) jest używane, gdy obiekt nie jest zaznaczony.
android:state_enabled
Wartość logiczna. Wartość prawda, jeśli ten element jest używany, gdy obiekt jest włączony. oznacza zdolność do rejestrowania zdarzeń dotknięcia lub kliknięcia; false, jeśli jest używana, gdy obiekt jest wyłączono.
android:state_activated
Wartość logiczna. Prawda, jeśli ten element jest używany, gdy obiekt jest aktywowany jako wybór trwały, np. „highlight” (zaznacz) poprzednio wybranego elementu listy w trwałym widok nawigacji; false, jeśli jest używana, gdy obiekt nie został aktywowany.

Wprowadzono w interfejsie API poziomu 11.

android:state_window_focused
Wartość logiczna. Prawda, jeśli ten element jest używany, gdy okno aplikacji jest zaznaczone, co oznacza aplikacja działa na pierwszym planie; false, jeśli ten element jest używany, gdy aplikacja nie jest aktywne, np. gdy obszar powiadomień zostanie otwarty lub pojawi się okno.

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 zawiera żadnego z poprzednich atrybutów stanu, jest on stosowany za każdym razem. Właśnie dlatego warto zadbać o jako zawsze ostatnią, jak widać w przykładzie poniżej.

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 rysować:

<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 pewną liczbą alternatywnych elementów, z których każdy ma przypisaną maksymalną wartość liczbową . Ustawienie wartości poziomu elementu rysowania za pomocą funkcji setLevel() wczytuje zasób rysowalny w poziomu listy, której wartość android:maxLevel jest większa lub równa wartości i przekazywane do metody.

lokalizacja pliku:

res/drawable/filename.xml(
) Nazwa pliku to identyfikator zasobu
skompilowany typ danych zasobu:
Wskaźnik zasobu LevelListDrawable
odniesienie do zasobu:
W języku Java: 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. Definiuje przestrzeń nazw XML, którą musi być "http://schemas.android.com/apk/res/android"
<item>
Określa element, który można narysować na określonym poziomie.

Atrybuty:

android:drawable
Zasób rysowalny. Wymagany. Odniesienie do elementu rysowalnego zasób, który ma zostać wstawiony.
android:maxLevel
Liczba całkowita. Maksymalny dozwolony poziom tego produktu.
android:minLevel
Liczba całkowita. Minimalny dozwolony poziom dla tego produktu.
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 to ustawienie do View, możesz zmienić poziom za pomocą setLevel() lub setImageLevel().

zobacz też:

Przejście z możliwością rysowania

Obiekt TransitionDrawable to obiekt rysowalny które mogą przechodzić między 2 innymi zasobami.

Każdy obiekt rysowalny jest reprezentowany przez element <item> wewnątrz jednego elementu <transition>. Obsługiwane są maksymalnie 2 elementy. Aby przejść dalej, wywołaj startTransition() Do przejście do tyłu, wywołaj reverseTransition().

lokalizacja pliku:

res/drawable/filename.xml(
) Nazwa pliku to identyfikator zasobu
skompilowany typ danych zasobu:
Wskaźnik zasobu TransitionDrawable
odniesienie do zasobu:
W języku Java: 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. Definiuje przestrzeń nazw XML, którą musi być "http://schemas.android.com/apk/res/android"
<item>
Określa element rysowalny, który ma być używany jako element przejścia, który można narysować. Musi być elementem podrzędnym elementu <transition>. Akceptuje podrzędne <bitmap> .

Atrybuty:

android:drawable
Zasób rysowalny. Wymagany. Odniesienie do elementu rysowalnego .
android:id
Identyfikator zasobu. Unikalny identyfikator zasobu tego elementu rysowanego. Tworzenie nowego zasobu Identyfikator tego produktu, użyj formularza: "@+id/name" Symbol plusa oznacza, że jest ona utworzona jako nowy ID. Za pomocą tego identyfikatora możesz pobierz i zmodyfikuj obiekt rysowalny za pomocą funkcji 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. Odsunię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 obiekt rysowalny do widoku:

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

Ten kod wykonuje 500 ms przejścia z pierwszego do drugiego elementu:

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ż:

Element rysowalny wektor

Element rysowalny zdefiniowany w kodzie XML, który wstawia inny obiekt rysowalny o określonej odległości. To jest przydatne gdy widok wymaga tła, które jest mniejsze niż jego rzeczywiste granice.

lokalizacja pliku:

res/drawable/filename.xml(
) Nazwa pliku to identyfikator zasobu
skompilowany typ danych zasobu:
Wskaźnik zasobu InsetDrawable
odniesienie do zasobu:
W języku Java: 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. Określa element rysowalny wektora. Musi to być element główny.

Atrybuty:

xmlns:android
Ciąg znaków. Wymagane. Definiuje przestrzeń nazw XML, którą musi być "http://schemas.android.com/apk/res/android"
android:drawable
Zasób rysowalny. Wymagany. Odniesienie do elementu rysowalnego zasób, który ma zostać wstawiony.
android:insetTop
Wymiar. Wcięcie u góry jako wartość wymiaru lub zasób wymiaru.
android:insetRight
Wymiar. Wcięcie z prawej, jako wartość wymiaru lub zasób wymiaru.
android:insetBottom
Wymiar. Wcięcie dolne jako wartość wymiaru lub zasób wymiaru.
android:insetLeft
Wymiar. Wcięcie z lewej 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ż:

Element rysowalny w klipsie

Element rysowalny zdefiniowany w kodzie XML, który przypina inny obiekt rysowalny na podstawie bieżącego poziomu obiektu rysowania. Ty może kontrolować szerokość i wysokość elementu rysowanego w zależności od poziomu, w postaci grawitacji, aby kontrolować, gdzie zostanie umieszczony w całym pojemniku. Najczęściej używane do implementacji takie jak paski postępu.

lokalizacja pliku:

res/drawable/filename.xml(
) Nazwa pliku to identyfikator zasobu
skompilowany typ danych zasobu:
Wskaźnik zasobu ClipDrawable
odniesienie do zasobu:
W języku Java: 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 element, który można rysować. Musi to być element główny.

Atrybuty:

xmlns:android
Ciąg znaków. Wymagane. Definiuje przestrzeń nazw XML, którą musi być "http://schemas.android.com/apk/res/android"
android:drawable
Zasób rysowalny. Wymagany. Odniesienie do elementu rysowalnego zasobu, który ma zostać przycięty.
android:clipOrientation
Słowo kluczowe. Orientacja klipu.

Musi mieć jedną z tych stałych wartości:

WartośćOpis
horizontal Przypnij element rysowalny w poziomie.
vertical Przypnij element rysowalny w pionie.
android:gravity
Słowo kluczowe. Określa miejsce klipu w elemencie rysowanym.

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. Gdy clipOrientation ma wartość "vertical", przycinanie ma miejsce na dole elementu, który można rysować.
bottom Umieść obiekt na dole kontenera, nie zmieniając jego rozmiaru. Gdy clipOrientation ma wartość "vertical", przycinanie ma miejsce na górze elementu, który można rysować.
left Umieść obiekt przy lewej krawędzi kontenera, nie zmieniając jego rozmiaru. To jest wartość domyślną. Gdy clipOrientation ma wartość "horizontal", przycinanie ma miejsce po prawej stronie obiekt rysowalny.
right Umieść obiekt przy prawej krawędzi kontenera, nie zmieniając jego rozmiaru. Gdy clipOrientation ma wartość "horizontal", przycinanie ma miejsce po lewej stronie argumentu obiekt rysowalny.
center_vertical Umieść obiekt na środku kontenera w pionie, nie zmieniając jego rozmiaru. Zachowanie przycięcia taka sama jak przy grawitacji "center".
fill_vertical W razie potrzeby zwiększ pionowy rozmiar obiektu, aby wypełnił cały kontener. Gdy clipOrientation ma wartość "vertical", przycinanie nie następuje, ponieważ element rysowalny wypełnia w pionie (chyba że poziom, który można narysować ma wartość 0, jest wtedy niewidoczny).
center_horizontal Umieść obiekt na środku kontenera w poziomie, nie zmieniając jego rozmiaru. Przycinanie działa tak samo jak przy grawitacji "center".
fill_horizontal W razie potrzeby powiększ obiekt w poziomie, aby wypełnił cały kontener. Kiedy clipOrientation ma wartość "horizontal", przycinanie nie występuje, ponieważ obiekt rysowalny wypełnia w poziomie (chyba że poziom, który można przeciągnąć, ma wartość 0, co oznacza, że nie jest widoczny).
center Umieść obiekt na środku kontenera na osi pionowej i poziomej, i jego rozmiaru. Gdy clipOrientation ma wartość "horizontal", przycinanie ma miejsce po lewej i prawej stronie. Gdy clipOrientation ma wartość "vertical", przycinanie ma miejsce na górze i na dole.
fill W razie potrzeby zwiększ rozmiar obiektu w poziomie i pionie, aby wypełnił cały obszar kontenera. Przycinanie nie występuje, ponieważ element rysowalny wypełnia w pionie i w poziomie (chyba że poziom, który można przeciągnąć, wynosi 0 – w takim przypadku nie jest widoczne).
clip_vertical Dodatkowa opcja, w ramach której można przyciąć górne lub dolne krawędzie elementu podrzędnego granic swojego kontenera. Klip jest oparty na grawitacji pionowej: górna grawitacja przycina dolna krawędź grawitacja przycina górną, ale żadna z nich nie przycina obu.
clip_horizontal Dodatkowa opcja, w ramach której można przyciąć lewe lub prawe krawędzie elementu podrzędnego granic swojego kontenera. Klip jest oparty na grawitacji poziomej: lewa grawitacja prawa grawitacja przycina lewą krawędź, ale żadna z nich nie przycina obu.
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" />

Poniższy kod XML układu stosuje klip, który można rysować do widoku:

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

Poniższy kod pobiera obiekt rysowalny i zwiększa liczbę przycinań do stopniowo odkrywać obraz:

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 spowoduje zmniejszenie liczby przycięć i powolne wyświetlenie obrazu. Oto i ona na poziomie 7000:

Uwaga: domyślny poziom to 0, co oznacza, że obraz jest całkowicie przycięty. nie jest widoczny. Przy poziomie 10 000 obraz nie jest przycięty i jest w pełni widoczny.

zobacz też:

Obiekt do rysowania na skali

Element rysowalny zdefiniowany w pliku XML, który zmienia rozmiar innego obiektu rysowalnego na podstawie jego bieżącego na poziomie 300%.

lokalizacja pliku:

res/drawable/filename.xml(
) Nazwa pliku to identyfikator zasobu
skompilowany typ danych zasobu:
Wskaźnik zasobu ScaleDrawable
odniesienie do zasobu:
W języku Java: 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 rysować. Musi to być element główny.

Atrybuty:

xmlns:android
Ciąg znaków. Wymagane. Definiuje przestrzeń nazw XML, którą musi być "http://schemas.android.com/apk/res/android"
android:drawable
Zasób rysowalny. Wymagany. Odniesienie do elementu rysowalnego .
android:scaleGravity
Słowo kluczowe. Określa pozycję grawitacji po skalowaniu.

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 przy lewej krawędzi kontenera, nie zmieniając jego rozmiaru. To jest wartość domyślną.
right Umieść obiekt przy 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 pionowy rozmiar obiektu, aby wypełnił cały kontener.
center_horizontal Umieść obiekt na środku kontenera w poziomie, nie zmieniając jego rozmiaru.
fill_horizontal W razie potrzeby powiększ obiekt w poziomie, aby wypełnił cały kontener.
center Umieść obiekt na środku kontenera na osi pionowej i poziomej, i jego rozmiaru.
fill W razie potrzeby zwiększ rozmiar obiektu w poziomie i pionie, aby wypełnił cały obszar kontenera.
clip_vertical Dodatkowa opcja, w ramach której można przyciąć górne lub dolne krawędzie elementu podrzędnego granic swojego kontenera. Klip jest oparty na grawitacji pionowej: górna grawitacja przycina dolna krawędź grawitacja przycina górną, ale żadna z nich nie przycina obu.
clip_horizontal Dodatkowa opcja, w ramach której można przyciąć lewe lub prawe krawędzie elementu podrzędnego granic swojego kontenera. Klip jest oparty na grawitacji poziomej: lewa grawitacja prawa grawitacja przycina lewą krawędź, ale żadna z nich nie przycina obu.
android:scaleHeight
Procent. Wysokość skali wyrażona jako procent wartości elementu, który można narysować związane. Format wartości to XX%, np.100% lub 12,5%.
android:scaleWidth
Procent. Szerokość skali wyrażona jako procent elementu, który można narysować związane. Format 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 rysowalny

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

lokalizacja pliku:

res/drawable/filename.xml(
) Nazwa pliku to identyfikator zasobu
skompilowany typ danych zasobu:
Wskaźnik zasobu GradientDrawable
odniesienie do zasobu:
W języku Java: 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. Definiuje przestrzeń nazw XML, którą musi 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, który wypełnia widok główny. To jest domyślny kształt.
"oval" Owal, który pasuje do wymiarów widoku, który zawiera.
"line" Pozioma linia rozciągająca się wzdłuż szerokości widoku, który zawiera. Ten kształt wymaga elementu <stroke> do określenia szerokości .
"ring" Okrągły kształt.

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

android:innerRadius
Wymiar. Promień dla wewnętrznej części pierścienia (otwór w środku) jako wartość wymiaru lub zasób wymiaru.
android:innerRadiusRatio
Swobodna. Promień obszaru wewnętrznego i jego części, wyrażony jako stosunek szerokości pierścienia. Na przykład jeśli chodzi o android:innerRadiusRatio="5", promień wewnętrzny jest równy szerokości pierścienia podzielonego przez 5. Ten została zastąpiona przez android:innerRadius. Wartością domyślną jest 9.
android:thickness
Wymiar. Grubość pierścień, jako wartość wymiaru lub zasób wymiaru.
android:thicknessRatio
Swobodna. Grubość pierścienia wyrażony jako stosunek szerokości pierścienia. Jeśli na przykład android:thicknessRatio="2", to grubość równa się szerokości pierścienia podzielonego przez 2. Ta wartość została zastąpiona przez android:innerRadius. Wartością domyślną jest 3.
android:useLevel
Wartość logiczna. Wartość prawda, jeśli jest używana jako LevelListDrawable. Zwykle ma wartość fałsz, W przeciwnym razie kształt może się nie pojawić.
<corners>
Tworzy 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. Ta wartość jest zastępowana dla każdego pod kątem tych atrybutów.
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: każdy róg musi początkowo mieć róg. promień jest większy niż 1 lub żadne narożniki nie są zaokrąglane. Jeśli chcesz mieć konkretne narożniki aby nie być zaokrąglane, możesz obejść ten problem, używając android:radius do ustawienia narożnika domyślnego. większy od 1, a następnie zastąp każdy narożnik wartościami, które i ustaw 0 („0dp”) w miejscach, 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
Swobodna. Względna pozycja na osi X środka gradientu (0–1,0).
android:centerY
Swobodna. Względna pozycja Y środka gradientu (0–1,0).
android:centerColor
Kolor. Opcjonalny kolor występujący między kolorem początkowym i końcowym. wartość szesnastkową lub zasób koloru.
android:endColor
Kolor. Kolor końcowy w postaci szesnastkowej. lub zasób koloru.
android:gradientRadius
Swobodna. Promień gradientu. Stosowane tylko wtedy, gdy android:type="radial".
android:startColor
Kolor. Kolor początkowy w postaci szesnastkowej lub zasób koloru.
android:type
Słowo kluczowe. Typ stosowanego wzorca gradientu. Prawidłowe wartości to:
WartośćOpis
"linear" Gradient liniowy. Jest to ustawienie domyślne.
"radial" Gradient promieniowy. Kolor początkowy to kolor środkowy.
"sweep" Duży gradient linii.
android:useLevel
Wartość logiczna. Prawda, jeśli jest używana jako LevelListDrawable.
<padding>
Dopełnienie stosowane do elementu widoku danych. Spowoduje to wypełnienie pozycji widoku a nie kształt.

Atrybuty:

android:left
Wymiar. Dopełnienie z lewej strony 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 z prawej strony 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ść wymiaru lub zasób wymiaru.

Uwaga: domyślnie kształt jest skalowany do rozmiaru kontenera. wyświetlane proporcjonalnie do zdefiniowanych tutaj wymiarów. Gdy używasz kształtu w elemencie ImageView, możesz ograniczyć skalowanie przez ustawienie atrybutu android:scaleType na "center".

<solid>
Jednolity kolor wypełnienia kształtu.

Atrybuty:

android:color
Kolor. Kolor, który zostanie zastosowany do kształtu w formacie szesnastkowym. lub zasób koloru.
<stroke>
Linia przerywana kształtu.

Atrybuty:

android:width
Wymiar. Grubość linii jako wartość wymiaru lub zasób wymiaru.
android:color
Kolor. Kolor linii, wartość szesnastkową lub zasób koloru.
android:dashGap
Wymiar. Odległość między myślnikami wiersza w formie wartości wymiaru lub zasobu wymiaru. Tej formuły można użyć tylko wtedy, gdy skonfigurowano ustawienie android:dashWidth.
android:dashWidth
Wymiar. Rozmiar każdej linii przerywanej jako wartość wymiaru lub zasób wymiaru. Tej formuły można użyć tylko wtedy, gdy skonfigurowano ustawienie 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 rysowalny do widoku:

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

Ten kod aplikacji pobiera kształt i stosuje go do widoku:

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ż: