it-roy-ru.com

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

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

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

253
Johann

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

public static int parseColor (String colorString)

From документация по Android :

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

516
jethro

Пытаться:

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

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

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

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

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

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

int color = 0xFFFF0000;
20
George Bailey

Это

int color =  Color.parseColor("colorstring");
13
Patricia Beier

Попробуй это:

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

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

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

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

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

10
Opy

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

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

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

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

4
Dave Long

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

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

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

3
M.Hefny

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

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