Как получить цвет из шестнадцатеричной строки цвета


305

Я хотел бы использовать цвет из строки гекса, например, "#FFFF0000"чтобы (скажем) изменить цвет фона макета. Color.HSVToColorвыглядит как победитель, но он принимает float[]в качестве параметра.

Я вообще близок к решению?


Ответы:


592

Попробуйте Colorметод класса:

public static int parseColor (String colorString)

Из документации Android :

Поддерживаемые форматы: #RRGGBB #AARRGGBB «красный», «синий», «зеленый», «черный», «белый», «серый», «голубой», «пурпурный», «желтый», «светло-серый», «темно-серый» '


4
Кто-нибудь знает, как анализировать #000значения?
Алекс Семенюк

6
Да, просто сделайте: 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) }пожалуйста, поправьте меня, если я ошибаюсь
xdevs23 12.12.15

6
Чтобы добавить к коду @ xdevs23, измените условие if на следующее:if(colorString.length() == 4 && colorString[0] == '#')
Zac

Ваш ответ будет лучше, если вы не только покажете функцию, но и как ее использовать: MyView.setBackgroundColor (Color.parseColor ("# 123456");
Ивонна Маргграф

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 (красный, синий, зеленый);
GTID

253

Пытаться:

myLayout.setBackgroundColor(Color.parseColor("#636161"));

4
если вы используете 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 имеет цветовые палитры с уже настроенными шестнадцатеричными значениями.

Эти цвета темы используются во всем приложении и выглядят так:

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <color name="primary">#3F51B5</color>
  <color name="primary_dark">#303F9F</color>
  <color name="primary_light">#C5CAE9</color>
  <color name="accent">#FF4081</color>
  <color name="primary_text">#212121</color>
  <color name="secondary_text">#757575</color>
  <color name="icons">#FFFFFF</color>
  <color name="divider">#BDBDBD</color>
</resources>

Если вам нужны дополнительные цвета, хорошей практикой является определение цвета в два этапа в xml. Сначала назовите шестнадцатеричное значение цвета, а затем назовите компонент вашего приложения, который должен получить определенный цвет. Это позволяет легко настроить цвета позже. Опять же, это в colors.xml .

<color name="orange">#fff3632b</color>
<color name="my_view_background_color">@color/orange</color>

Затем, когда вы хотите установить цвет в коде, сделайте следующее:

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

Ноты


22

Преобразовать эту строку в intцвет , который может быть использован в setBackgroundColorиsetTextColor

String string = "#FFFF0000";
int color = Integer.parseInt(string.replaceFirst("^#",""), 16);

16 означает, что он шестнадцатеричный, а не обычный 0-9. Результат должен быть таким же, как

int color = 0xFFFF0000;

как я могу конвертировать String color = "80000000"; к цвету int =?
Ашиш Саху

Я думаю, что строковая версия должна быть #80000000в этом случае версия int будет int color = 0x80000000;. Если это не сработает, тогда опубликуйте новый вопрос с более подробной информацией, чтобы больше людей, чем я, заметили это. Имейте в виду #80000000, это полупрозрачный черный цвет.
Брайан Филд

Я знаю, что int будет int color = 0x80000000, но моя проблема в том, как преобразовать его ... Но теперь я сам решу свою проблему с помощью int color = parseColor ("#" + "80000000"); ... спасибо за ответ.
Ашиш Саху

Я получил исключение, используя ваш код: java.lang.NumberFormatException: недопустимый int: "FFFF0000"
error1337



12

Я использую это, и он отлично работает для меня, чтобы установить любой цвет, который я хочу.

public static final int MY_COLOR = Color.rgb(255, 102, 153);

Установите цвета, используя 0-255 для каждого красного, зеленого и синего, затем в любом месте, где вы хотите использовать этот цвет, просто поместите MY_COLOR вместо Color.BLUE или Color.RED или любой другой статический цвет, предлагаемый классом Color.

Просто выполните поиск в Google для цветовой диаграммы, и вы сможете найти диаграмму с правильными кодами RGB, используя 0-255.



6

Файл XML сохранен в файле res / values ​​/ colors.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <color name="opaque_red">#f00</color>
   <color name="translucent_red">#80ff0000</color>
</resources>

Этот код приложения извлекает ресурс цвета:

Resources res = getResources();
int color = res.getColor(R.color.opaque_red);

Этот макет XML применяет цвет к атрибуту:

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/translucent_red"
    android:text="Hello"/>

5

Попробуйте вместо этого использовать 0xFFF000 и передать его в метод Color.HSVToColor.


2
Я ожидаю, что вы должны заменить этот третий F с нуля. В ОП я думаю, что первые два символа F используются для установки непрозрачности.
Брайан Филд

4

Если вы определяете цвет в своем XML и хотите использовать его для изменения цвета фона или чего-то еще, этот API - тот, который вы ищете:

 ((TextView) view).setBackgroundResource(R.drawable.your_color_here);

В моем примере я использовал его для TestView


0

Для сокращенного шестнадцатеричного кода

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);
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.