Zasób listy stanów kolorów

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