Próbuję stworzyć ColorStateList
programowo używając tego:
ColorStateList stateList = new ColorStateList(states, colors);
Ale nie jestem pewien, jakie są te dwa parametry.
Zgodnie z dokumentacją:
public ColorStateList (int[][] states, int[] colors)
Dodano na poziomie API 1
Tworzy ColorStateList, który zwraca określone mapowanie ze stanów na kolory.
Czy ktoś może mi wyjaśnić, jak to stworzyć?
Jakie jest znaczenie dwuwymiarowej tablicy stanów?
android
android-color
Anukool
źródło
źródło
{pressed}
,{focused}
,{-enabled}
,{}
. Przez to może być przełącznik{checked, pressed}
,{pressed}
,{checked, focused}
,{focused}
,{checked}
,{-enabled}
,{}
. Lub przełącznik, który ignoruje skupić:{checked, pressed}
,{pressed}
,{checked}
,{-enabled}
,{}
.Pierwszy wymiar to tablica zestawów stanów, drugi to sam zestaw stanów. Tablica kolorów zawiera kolory dla każdego pasującego zestawu stanów, dlatego długość tablicy kolorów musi pasować do pierwszego wymiaru tablicy stanów (w przeciwnym razie nastąpi awaria, gdy stan jest „używany”). Tutaj i przykład:
mam nadzieję że to pomoże.
Przykład EDYCJI: lista stanów kolorów XML, na przykład:
wyglądałoby tak
źródło
new int[]{}
ostatni - jak pokazano w ostatnim bloku kodu tej odpowiedzi. Jedyną zanegowaną wartością, której zwykle używam, jest „-enabled”. Inny przykład, jeśli chcesz, trzy różne kolory: „koncentruje + wciśnięty”, „koncentruje + nie wciśnięty”, „wciśnięty + nie koncentruje się”, można po prostu umieścić{focused, pressed}
,{focused}
,{pressed}
. Zostanie użyty pierwszy „prawdziwy”.{pressed}
,{-pressed}
,{focused}
,{-focused
}. Problem w tym, że{pressed}
i{-pressed}
obejmują WSZYSTKIE możliwości (przycisk jest wciśnięty lub nie), więc żadne kolory wymienione później nigdy nie będą używane.!Czasami to wystarczy:
źródło
Niestety żadne z rozwiązań nie działa dla mnie.
Oto konstruktor z kodu źródłowego:
źródło
Oto przykład, jak
ColorList
programowo stworzyć w Kotlinie:źródło
Odbijając się od odpowiedzi Jonathana Ellisa , w Kotlinie możesz zdefiniować funkcję pomocniczą, aby kod był nieco bardziej idiomatyczny i łatwiejszy do odczytania, więc możesz zamiast tego napisać to:
colorStateListOf
można zaimplementować w następujący sposób:Też mam:
Aby móc wywołać tę samą nazwę funkcji, bez względu na to, czy jest to selektor, czy pojedynczy kolor.
źródło
Moja klasa konstruktora do tworzenia
ColorStateList
Przykład użycia
źródło
jeśli korzystasz z zasobu Colors.xml
źródło
getResources()
przestarzałe, jest terazContextCompat.getColor(this,R.color.colorname);
lubContextCompat.getColor(getActivity(),R.color.colorname);
do użycia we fragmencienew int[0]
(jako element na liście pierwszego parametru) jest tablicą o zerowej długości i reprezentuje ustawienie domyślnego koloru. Tutaj jest to jedyny element, co oznacza, że odcień jest stosowany do wszystkich stanów przycisku. Jest to równoważne z odpowiedziąnew int[]{}
Rogera Aliena.