Как получить цвет из шестнадцатеричной строки цвета
305
Я хотел бы использовать цвет из строки гекса, например, "#FFFF0000"чтобы (скажем) изменить цвет фона макета.
Color.HSVToColorвыглядит как победитель, но он принимает float[]в качестве параметра.
если вы используете xamarin .. код этого Android.Graphics.Color.ParseColor ("# 636161") с буквой "P" в верхнем
Игорь Монтейру
38
Этот вопрос задается для нескольких запросов, связанных с шестнадцатеричным цветом, поэтому я добавлю резюме здесь.
Цвет от int
Шестнадцатеричные цвета принимают форму RRGGBBили AARRGGBB(альфа, красный, зеленый, синий). По моему опыту, при использовании intнапрямую, вам нужно использовать полную AARRGGBBформу. Если у вас есть только RRGGBBформа, просто добавьте к ней префикс, FFчтобы сделать альфа (прозрачность) полностью непрозрачным. Вот как вы могли бы установить это в коде. Использование 0xв начале означает, что он шестнадцатеричный, а не базовый 10.
int myColor =0xFF3F51B5;
myView.setBackgroundColor(myColor);
Цвет из строки
Как уже отмечали другие, вы можете использовать Color.parseStringтак
int myColor =Color.parseColor("#3F51B5");
myView.setBackgroundColor(myColor);
Обратите внимание, что строка должна начинаться с #. Оба RRGGBBи AARRGGBBформаты поддерживаются.
Цвет из XML
На самом деле вы должны получать свои цвета из XML, когда это возможно. Это рекомендуемый вариант, поскольку он значительно облегчает изменение цвета в вашем приложении. Если вы установили много шестнадцатеричных цветов по всему коду, то будет очень трудно попытаться изменить их позже.
Дизайн материала Android имеет цветовые палитры с уже настроенными шестнадцатеричными значениями.
Если вам нужны дополнительные цвета, хорошей практикой является определение цвета в два этапа в xml. Сначала назовите шестнадцатеричное значение цвета, а затем назовите компонент вашего приложения, который должен получить определенный цвет. Это позволяет легко настроить цвета позже. Опять же, это в colors.xml .
Затем, когда вы хотите установить цвет в коде, сделайте следующее:
int myColor =ContextCompat.getColor(context, R.color.my_view_background_color);
myView.setBackgroundColor(myColor);
Android предопределенные цвета
Класс Color поставляется с рядом предопределенных цветовых констант. Вы можете использовать это так.
int myColor =Color.BLUE;
myView.setBackgroundColor(myColor);
Другие цвета
Color.BLACK
Color.BLUE
Color.CYAN
Color.DKGRAY
Color.GRAY
Color.GREEN
Color.LTGRAY
Color.MAGENTA
Color.RED
Color.TRANSPARENT
Color.WHITE
Color.YELLOW
Ноты
Быстрый способ найти шестнадцатеричные цвета - открыть диалоговое окно выбора цвета в Gimp (или в другом программном обеспечении для редактирования фотографий).
как я могу конвертировать String color = "80000000"; к цвету int =?
Ашиш Саху
Я думаю, что строковая версия должна быть #80000000в этом случае версия int будет int color = 0x80000000;. Если это не сработает, тогда опубликуйте новый вопрос с более подробной информацией, чтобы больше людей, чем я, заметили это. Имейте в виду #80000000, это полупрозрачный черный цвет.
Брайан Филд
Я знаю, что int будет int color = 0x80000000, но моя проблема в том, как преобразовать его ... Но теперь я сам решу свою проблему с помощью int color = parseColor ("#" + "80000000"); ... спасибо за ответ.
Ашиш Саху
Я получил исключение, используя ваш код: java.lang.NumberFormatException: недопустимый int: "FFFF0000"
Установите цвета, используя 0-255 для каждого красного, зеленого и синего, затем в любом месте, где вы хотите использовать этот цвет, просто поместите MY_COLOR вместо Color.BLUE или Color.RED или любой другой статический цвет, предлагаемый классом Color.
Просто выполните поиск в Google для цветовой диаграммы, и вы сможете найти диаграмму с правильными кодами RGB, используя 0-255.
int red = colorString.charAt(1)=='0'?0:255;int blue = colorString.charAt(2)=='0'?0:255;int green = colorString.charAt(3)=='0'?0:255;Color.rgb(red, green,blue);
Ответы:
Попробуйте
Color
метод класса:Из документации Android :
источник
#000
значения?if(colorString.length() == 4) { colorString = "#" + StringUtils.repeat(colorString.substring(1, 1), 1) + StringUtils.repeat(colorString.substring(2, 2), 1) + StringUtils.repeat(colorString.substring(3, 3), 1) }
пожалуйста, поправьте меня, если я ошибаюсьif(colorString.length() == 4 && colorString[0] == '#')
Пытаться:
источник
Этот вопрос задается для нескольких запросов, связанных с шестнадцатеричным цветом, поэтому я добавлю резюме здесь.
Цвет от int
Шестнадцатеричные цвета принимают форму
RRGGBB
илиAARRGGBB
(альфа, красный, зеленый, синий). По моему опыту, при использованииint
напрямую, вам нужно использовать полнуюAARRGGBB
форму. Если у вас есть толькоRRGGBB
форма, просто добавьте к ней префикс,FF
чтобы сделать альфа (прозрачность) полностью непрозрачным. Вот как вы могли бы установить это в коде. Использование0x
в начале означает, что он шестнадцатеричный, а не базовый 10.Цвет из строки
Как уже отмечали другие, вы можете использовать
Color.parseString
такОбратите внимание, что строка должна начинаться с
#
. ОбаRRGGBB
иAARRGGBB
форматы поддерживаются.Цвет из XML
На самом деле вы должны получать свои цвета из XML, когда это возможно. Это рекомендуемый вариант, поскольку он значительно облегчает изменение цвета в вашем приложении. Если вы установили много шестнадцатеричных цветов по всему коду, то будет очень трудно попытаться изменить их позже.
Дизайн материала Android имеет цветовые палитры с уже настроенными шестнадцатеричными значениями.
Эти цвета темы используются во всем приложении и выглядят так:
colors.xml
Если вам нужны дополнительные цвета, хорошей практикой является определение цвета в два этапа в xml. Сначала назовите шестнадцатеричное значение цвета, а затем назовите компонент вашего приложения, который должен получить определенный цвет. Это позволяет легко настроить цвета позже. Опять же, это в colors.xml .
Затем, когда вы хотите установить цвет в коде, сделайте следующее:
Android предопределенные цвета
Класс Color поставляется с рядом предопределенных цветовых констант. Вы можете использовать это так.
Другие цвета
Color.BLACK
Color.BLUE
Color.CYAN
Color.DKGRAY
Color.GRAY
Color.GREEN
Color.LTGRAY
Color.MAGENTA
Color.RED
Color.TRANSPARENT
Color.WHITE
Color.YELLOW
Ноты
источник
Преобразовать эту строку в
int
цвет , который может быть использован вsetBackgroundColor
иsetTextColor
16 означает, что он шестнадцатеричный, а не обычный 0-9. Результат должен быть таким же, как
источник
#80000000
в этом случае версия int будетint color = 0x80000000;
. Если это не сработает, тогда опубликуйте новый вопрос с более подробной информацией, чтобы больше людей, чем я, заметили это. Имейте в виду#80000000
, это полупрозрачный черный цвет.Это
источник
Попробуй это:
источник
Я использую это, и он отлично работает для меня, чтобы установить любой цвет, который я хочу.
Установите цвета, используя 0-255 для каждого красного, зеленого и синего, затем в любом месте, где вы хотите использовать этот цвет, просто поместите MY_COLOR вместо Color.BLUE или Color.RED или любой другой статический цвет, предлагаемый классом Color.
Просто выполните поиск в Google для цветовой диаграммы, и вы сможете найти диаграмму с правильными кодами RGB, используя 0-255.
источник
В Xamarin Используйте это
источник
Файл XML сохранен в файле res / values / colors.xml:
Этот код приложения извлекает ресурс цвета:
Этот макет XML применяет цвет к атрибуту:
источник
Попробуйте вместо этого использовать 0xFFF000 и передать его в метод Color.HSVToColor.
источник
Если вы определяете цвет в своем XML и хотите использовать его для изменения цвета фона или чего-то еще, этот API - тот, который вы ищете:
В моем примере я использовал его для TestView
источник
Для сокращенного шестнадцатеричного кода
источник