Jeśli zdefiniowałem kolor w zasobach
<resources>
<color name="someColor">#123456</color>
</resources>
można ustawić kolor według jego identyfikatora, np
view.setTextColor(R.color.someColor);
Czy można również pobrać wartość ciągu kolorów z colors.xml?
Coś jak
colorStr = getColor(R.color.someColor);
// -> colorStr = "#123456"
Jeśli tak, czy ktoś może podać przykład?
Dziękuję Ci
//noinspection ResourceType
tuż nad swoim oświadczeniem.getResources().getString(0+R.color.someColor);
działaTylko ze względu na łatwą copypastę:
Lub jeśli chcesz to bez przezroczystości:
źródło
'#' + Integer.toHexString(getResources().getColor(R.color.someColor);
ponieważ późniejColor.parseColor
Odpowiedzi podane powyżej nie są aktualizowane.
Spróbuj tego
źródło
Wszystkie rozwiązania tutaj wykorzystujące
Integer.toHexString()
przerwanie, jeśli w ciągu szesnastkowym mają zera wiodące. Kolory,#0affff
które przyniosłyby efekt#affff
. Użyj tego zamiast tego:lub z alfa:
źródło
Przyczyna
getResources().getColor
potrzeba api> 23. Więc to jest lepsze: tylko ze względu na łatwe kopiowanie i wklejanie:Integer.toHexString( ContextCompat.getColor( getContext(), R.color.someColor ) );
Lub jeśli chcesz, aby był bez przejrzystości: `
Integer.toHexString( ContextCompat.getColor( getContext(), R.color.someColor ) & 0x00ffffff );
źródło
ContextCompat.getColor
nie przyjmuje 3 argumentówDla API powyżej 21 możesz użyć
To zwróci kolor w postaci łańcucha. Aby przekonwertować to na kolor w formacie liczb całkowitych (czasami akceptowane są tylko liczby całkowite), należy:
Powyższe wyrażenie zwraca całkowity odpowiednik koloru zdefiniowanego w pliku color.xml
źródło
Dodaj @SuppressLint („ResourceType”), jeśli wystąpi błąd. Jak poniżej.
źródło
Mi to pasuje!
źródło
Myślę, że nie ma do tego standardowej funkcjonalności. Możesz jednak zmienić zwracaną wartość z
getColor()
na hex i zmienić wartość szesnastkową na łańcuch.hex 123456 = int 1193046;
źródło
Oto jak to zrobiłem:
źródło
Jeśli nie chcesz używać
ContextCompat
lubSuppressLint
, po prostu dodajstring
zasób bezpośrednio pod swoimcolor
.Zamiast
Posługiwać się
Twój kod staje się bardziej powtarzalny, ale jest znacznie czystszy. Poza tym zapomnienie o aktualizacji
string
po zmianiecolor
jest prawie niemożliwe, ponieważ znajdują się one tuż obok siebie.źródło