Если я определил цвет в ресурсах
<resources>
<color name="someColor">#123456</color>
</resources>
можно установить цвет по его идентификатору, например
view.setTextColor(R.color.someColor);
Можно ли также получить значение строки цвета из colors.xml?
Что-то вроде
colorStr = getColor(R.color.someColor);
// -> colorStr = "#123456"
Если да, то можно ли привести пример?
Спасибо
//noinspection ResourceType
прямо над вашим заявлением.getResources().getString(0+R.color.someColor);
работаетПросто ради легкой копипасты:
Или, если хотите, без прозрачности:
источник
'#' + Integer.toHexString(getResources().getColor(R.color.someColor);
поскольку позже я использовал его вColor.parseColor
Приведенные выше ответы не обновляются.
Примерьте вот это
источник
Все решения здесь используют
Integer.toHexString()
break, если у вас будут ведущие нули в вашей шестнадцатеричной строке. Цвета вроде#0affff
бы приводятся#affff
. Используйте вместо этого:или с альфа:
источник
Причина
getResources().getColor
необходимости api> 23. Так что это лучше: просто для удобства копирования и вставки:Integer.toHexString( ContextCompat.getColor( getContext(), R.color.someColor ) );
Или, если вы хотите без прозрачности: `
Integer.toHexString( ContextCompat.getColor( getContext(), R.color.someColor ) & 0x00ffffff );
источник
ContextCompat.getColor
не принимает 3 аргументаДля API выше 21 вы можете использовать
Это вернет цвет в строковом формате. Чтобы преобразовать это в цвет в целочисленном формате (иногда принимаются только целые числа), тогда:
Вышеприведенное выражение возвращает целочисленный эквивалент цвета, определенного в файле color.xml.
источник
Добавьте @SuppressLint ("ResourceType") в случае возникновения ошибки. Как ниже.
источник
Меня устраивает!
источник
Я не думаю, что для этого есть стандартная функциональность. Однако вы можете превратить возвращаемое значение из
getColor()
в шестнадцатеричное и превратить шестнадцатеричное значение в строку.шестнадцатеричный 123456 = int 1193046;
источник
Вот как я это сделал:
источник
Если вы не хотите использовать
ContextCompat
илиSuppressLint
, просто добавьтеstring
ресурс прямо под вашимcolor
.Вместо того
Использовать
Ваш код действительно становится более повторяющимся, но он намного чище. Кроме того, забыть обновить
string
после измененияcolor
практически невозможно, так как они находятся рядом друг с другом.источник