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

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

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

Ответ 1

Попробуйте метод Color class:

public static int parseColor (String colorString)

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

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

Ответ 2

Try:

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

Ответ 3

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

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

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

int color = 0xFFFF0000;

Ответ 4

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

Цвет от 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

Заметки

Ответ 5

Это

int color =  Color.parseColor("colorstring");

Ответ 6

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

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

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

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

Ответ 7

Попробуйте следующее:

vi.setBackgroundColor(Color.parseColor("#FFFF0000"));

Ответ 8

Файл 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"/>

Ответ 9

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

Ответ 10

В Xamarin Используйте это

Control.SetBackgroundColor(global::Android.Graphics.Color.ParseColor("#F5F1F1"));

Ответ 11

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

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

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

Ответ 12

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

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);