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