Ответ 1
Это ваш ответ
colorStr=getResources().getString(R.color.someColor);
вы получите
colorStr = "#123456"
Если я определил цвет в ресурсах
<resources>
<color name="someColor">#123456</color>
</resources>
можно установить цвет по его идентификатору, например
view.setTextColor(R.color.someColor);
Можно ли также получить значение цветовой строки из colors.xml?
Что-то вроде
colorStr = getColor(R.color.someColor);
// -> colorStr = "#123456"
Если да, может ли кто-нибудь привести пример?
Спасибо
Это ваш ответ
colorStr=getResources().getString(R.color.someColor);
вы получите
colorStr = "#123456"
Просто ради простой copypasta:
"#" + Integer.toHexString(ContextCompat.getColor(getActivity(), R.color.some_color));
Или, если вы хотите его без прозрачности:
"#" + Integer.toHexString(ContextCompat.getColor(getActivity(), R.color.some_color) & 0x00ffffff);
Ответы, приведенные выше, не обновляются.
Пожалуйста, попробуйте этот
String colorHex = "#" + Integer.toHexString(ContextCompat.getColor(getActivity(), R.color.dark_sky_blue) & 0x00ffffff);
Причина getResources().getColor
нужна api > 23. Итак, это лучше:
Просто для удобства копирования и вставки:
Integer.toHexString( ContextCompat.getColor( getContext(), R.color.someColor ) );
Или если вы хотите его без прозрачности: `
Integer.toHexString( ContextCompat.getColor( getContext(), R.color.someColor ) & 0x00ffffff );
Для API выше 21 вы можете использовать
getString(R.color.color_name);
Это вернет цвет в строчном формате. Чтобы преобразовать это в цвет в целочисленном формате (иногда принимаются только целые числа), тогда:
Color.parseColor(getString(R.color.color_name));
Вышеприведенное выражение возвращает целочисленный эквивалент цвета, определенного в файле color.xml
Я не думаю, что для этого есть стандартная функциональность. Тем не менее вы можете повернуть возврат в значение от getColor()
до шестнадцатеричного и превратить шестнадцатеричное значение в строку.
hex 123456 = int 1193046;
Вот как я это сделал:
String color = "#" + Integer.toHexString(ContextCompat.getColor
(getApplicationContext(), R.color.yourColor) & 0x00ffffff);
Все решения, использующие Integer.toHexString()
, разбиваются, если в шестнадцатеричной строке будут указатели на нули. Цвета, такие как #0affff
, приведут к #affff
. Используйте это вместо:
String.format("#%06x", ContextCompat.getColor(this, R.color.your_color) & 0xffffff)
или с альфой:
String.format("#%08x", ContextCompat.getColor(this, R.color.your_color) & 0xffffffff)