ColorStateList
to obiekt, który można zdefiniować w kodzie XML i zastosować jako kolor, który faktycznie zmienia kolory w zależności
stan obiektu View
do których zastosowano. Przykład: Button
widżet może znajdować się w jednym z kilku stanów: kliknąć, zaznaczyć albo żaden. Za pomocą listy stanów kolorów
możesz podać inny kolor dla każdego stanu.
Listę stanów opisujesz w pliku XML. Każdy kolor jest zdefiniowany w elemencie <item>
wewnątrz pojedynczego elementu <selector>
. Co <item>
ma różne atrybuty do opisania stanu, w jakim jest zastosowany.
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 jest wybierany na podstawie „najlepszego”
ale raczej pierwszy element, który spełnia minimalne kryteria stanu.
Uwaga: jeśli chcesz udostępnić statyczny zasób koloru, użyj atrybutu kolor
prostą wartość color.
- lokalizacja pliku:
res/color/filename.xml
(- )
Nazwa pliku jest używana jako identyfikator zasobu.
- skompilowany typ danych zasobu:
- Wskaźnik zasobu
ColorStateList
- odniesienie do zasobu:
-
W języku Java:
R.color.filename
W pliku XML: @[package:]color/filename
- składnia:
-
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:color="hex_color"
android:lStar="floating_point_value"
android:state_pressed=["true" | "false"]
android:state_focused=["true" | "false"]
android:state_selected=["true" | "false"]
android:state_checkable=["true" | "false"]
android:state_checked=["true" | "false"]
android:state_enabled=["true" | "false"]
android:state_window_focused=["true" | "false"] />
</selector>
- elementy:
-
<selector>
- Wymagane. To jest element główny. Zawiera co najmniej 1 element
<item>
.
Atrybuty:
xmlns:android
- Ciąg znaków. Wymagane. Definiuje przestrzeń nazw XML, która jest
"http://schemas.android.com/apk/res/android"
<item>
- Określa kolor używany w określonych stanach, zgodnie z jego atrybutami. Jest to
element podrzędny elementu
<selector>
.
Atrybuty:
android:color
- Kolor sześciokątny. Wymagany. Kolor jest określony za pomocą atrybutu
Wartość RGB i opcjonalny kanał alfa.
Wartość zawsze zaczyna się od znaku funta (#
), po którym następuje znak
Informacje w kolorach alfa-czerwonym, zielonym i niebieskim w jednym z tych formatów:
- #RGB
- #ARGB
- #RRGGBB
- Numer AARRGGBB
android:lStar
- Liczba zmiennoprzecinkowa. Atrybut opcjonalny. Ten atrybut modyfikuje luminancję percepcyjną koloru podstawowego. Konieczne jest
zmiennoprzecinkową z zakresu od 0 do 100 lub atrybut tematu, który ma taką postać. Atrybut
ogólny kolor jest obliczany przez konwersję koloru podstawowego na przestrzeń kolorów przyjazną dla ułatwień dostępu.
a jego L* na wartość określoną w atrybucie
lStar
.
Przykład: android:lStar="50"
android:state_pressed
- Wartość logiczna.
"true"
, jeśli ten element jest używany podczas klikania obiektu (np. przycisku)
użytkownik może kliknąć dany element. Jeśli ten element jest używany domyślnie, bez kliknięcia, jest to "false"
.
android:state_focused
- Wartość logiczna.
"true"
, jeśli ten element jest używany, gdy obiekt jest zaznaczony – np. gdy przycisk
zostanie podświetlony za pomocą kulki lub pada kierunkowego. Jeśli ten element jest używany domyślnie, wartość wynosi "false"
.
i stan niezaznaczony.
android:state_selected
- Wartość logiczna.
"true"
, jeśli ten element jest używany, gdy obiekt jest zaznaczony, na przykład
Karta jest otwarta. Jeśli ten element był użyty, gdy obiekt nie został wybrany, jest to "false"
.
android:state_checkable
- Wartość logiczna.
"true"
, jeśli ten element jest używany, gdy obiekt można zaznaczyć. Jest to "false"
, jeśli
jest używany, gdy obiektu nie można zaznaczyć. Przydatny tylko wtedy, gdy obiekt może
przejście między widżetami, które można zaznaczyć lub których nie można zaznaczyć.
android:state_checked
- Wartość logiczna.
"true"
, jeśli ten element jest używany, gdy obiekt jest sprawdzany. Jeśli będzie: "false"
jest używane, gdy obiekt jest odznaczony.
android:state_enabled
- Wartość logiczna.
"true"
, jeśli ten element jest używany, gdy obiekt jest włączony, z możliwością
takich działań. Wartość "false"
, jeśli jest używana, gdy obiekt jest wyłączony.
android:state_window_focused
- Wartość logiczna.
"true"
, jeśli ten element jest używany, gdy okno aplikacji jest zaznaczone,
czyli
Aplikacja działa na pierwszym planie. Wartość "false"
, jeśli ten element jest używany, gdy aplikacja
okno jest nieaktywne, np. gdy obszar powiadomień został przesunięty w dół lub pojawi się okno.
Uwaga: pierwszy element na liście stanów, w którym występuje
pasuje do bieżącego stanu obiektu. Jeśli więc pierwszy element na liście zawiera
żadnego z poprzednich atrybutów stanu, będzie on stosowany za każdym razem. Z tego powodu umieść
jak widać w następnym przykładzie.
- przykład:
- Plik XML zapisany o
res/color/button_text.xml
:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:color="#ffff0000"/> <!-- pressed -->
<item android:state_focused="true"
android:color="#ff0000ff"/> <!-- focused -->
<item android:color="#ff000000"/> <!-- default -->
</selector>
Ten układ XML układu stosuje listę kolorów do elementu View
:
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/button_text"
android:textColor="@color/button_text" />
- zobacz też:
-