ColorStateList
to obiekt, który można zdefiniować w pliku XML i zastosować jako kolor, którego kolory zmieniają się w zależności od stanu obiektu View
, do którego jest stosowany. Na przykład widżet Button
może mieć jeden z kilku stanów: naciśnięty, aktywny lub żaden. Korzystając z 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 określony w elemencie <item>
wewnątrz pojedynczego elementu <selector>
. Każdy element <item>
ma różne atrybuty do opisania stanu, w którym jest używany.
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 jest na podstawie „najlepszego” dopasowania, a raczej pierwszego elementu, który spełnia minimalne kryteria stanu.
Uwaga: jeśli chcesz udostępnić statyczny zasób koloru, użyj prostej wartości atrybutu color.
- lokalizacja pliku:
res/color/filename.xml
Jako identyfikator zasobu jest używana nazwa pliku.
- typ danych skompilowanych zasobów:
- Wskaźnik zasobu do
ColorStateList
- odniesienie do zasobów:
-
W Javie:
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. Określa przestrzeń nazw XML, którą jest
"http://schemas.android.com/apk/res/android"
.
<item>
- Określa kolor, który będzie używany w określonych stanach zgodnie z jego atrybutami. Jest elementem podrzędnym elementu
<selector>
.
Atrybuty:
android:color
- Kolor szesnastkowy. Wymagany. Kolor jest określany za pomocą wartości RGB i opcjonalnie kanału alfa.
Wartość zawsze zaczyna się od znaku funta (#
), po którym następuje informacja Alfa-Czerwony-Zielony-Niebieski w jednym z tych formatów:
- #RGB
- #ARGB
- #RRGGBB
- #AARRGGBB
android:lStar
- Liczba zmiennoprzecinkowa. Atrybut opcjonalny. Ten atrybut zmienia luminancję koloru podstawowego. Przyjmuje wartość zmiennoprzecinkową między 0 a 100 lub atrybut motywu, który sprawdza się w ten sposób. Całkowity kolor produktu jest obliczany przez przekształcenie koloru podstawowego w przestrzeń kolorów ułatwiającą ułatwienia dostępu i ustawienie dla atrybutu L* wartości określonej w atrybucie
lStar
.
Przykład: android:lStar="50"
android:state_pressed
- Wartość logiczna.
"true"
, jeśli ten element jest używany po kliknięciu obiektu, na przykład po dotknięciu lub kliknięciu przycisku. Jeśli ten element jest używany w domyślnym stanie (bez kliknięcia), to "false"
.
android:state_focused
- Wartość logiczna.
"true"
, jeśli ten element będzie używany, gdy obiekt jest zaznaczony, na przykład po podświetleniu przycisku za pomocą kulki lub pada kierunkowego. Jeśli ten element jest używany w domyślnym stanie i nie jest wybrany, to wartość "false"
.
android:state_selected
- Wartość logiczna.
"true"
, jeśli ten element jest używany po wybraniu obiektu, na przykład po otwarciu karty. Wartość "false"
, jeśli ten element został użyty, gdy obiekt nie został zaznaczony.
android:state_checkable
- Wartość logiczna.
"true"
, jeśli ten element jest używany, gdy obiekt można sprawdzić. To "false"
, jeśli ten element jest używany, gdy obiektu nie można sprawdzić. Ta opcja jest przydatna tylko wtedy, gdy obiekt może się przełączać między widżetem, który można zaznaczyć, a którego nie można sprawdzić.
android:state_checked
- Wartość logiczna.
"true"
, jeśli ten element będzie używany podczas sprawdzania obiektu. Wartość "false"
, jeśli jest używana, gdy obiekt jest odznaczony.
android:state_enabled
- Wartość logiczna.
"true"
, jeśli ten element jest używany, gdy obiekt jest włączony i może odbierać zdarzenia kliknięcia lub dotknięcia. 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 aktywne, co oznacza, że aplikacja działa na pierwszym planie. "false"
, jeśli ten element jest używany, gdy okno aplikacji nie jest zaznaczone, na przykład po otwarciu obszaru powiadomień w dół lub po wyświetleniu okna.
Uwaga: stosowany jest 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, obowiązuje on za każdym razem. Z tego względu wartość domyślną należy umieścić na końcu, tak jak w tym 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 kod 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ż:
-