Я хотел бы использовать цвет из строки hexa, например "#FFFF0000"
, чтобы (скажем) изменить цвет фона макета.
Color.HSVToColor
выглядит как победитель, но в качестве параметра требуется float[]
.
Я вообще-то близко к решению?
Я хотел бы использовать цвет из строки hexa, например "#FFFF0000"
, чтобы (скажем) изменить цвет фона макета.
Color.HSVToColor
выглядит как победитель, но в качестве параметра требуется float[]
.
Я вообще-то близко к решению?
Попробуйте метод Color
class:
public static int parseColor (String colorString)
Поддерживаемые форматы: #RRGGBB #AARRGGBB "красный", "синий", "зеленый", "черный", "белый", "серый", "голубой", "пурпурный", "желтый", "светло-серый", "темно-серый" '
Try:
myLayout.setBackgroundColor(Color.parseColor("#636161"));
Преобразуйте эту строку в цвет int
, который можно использовать в setBackgroundColor
и setTextColor
String string = "#FFFF0000";
int color = Integer.parseInt(string.replaceFirst("^#",""), 16);
16 означает, что он шестнадцатеричный, а не обычный 0-9. Результат должен быть таким же, как
int color = 0xFFFF0000;
Этот вопрос задается для нескольких запросов, связанных с шестнадцатеричным цветом, поэтому я добавлю резюме здесь.
Шестнадцатеричные цвета имеют вид 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, когда это возможно. Это рекомендуемый вариант, поскольку он значительно облегчает изменение цвета в вашем приложении. Если вы установили много шестнадцатеричных цветов по всему коду, то будет очень трудно попытаться изменить их позже.
Дизайн материала 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);
Класс 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
Это
int color = Color.parseColor("colorstring");
Я использую это, и он отлично работает для меня для установки любого цвета, который я хочу.
public static final int MY_COLOR = Color.rgb(255, 102, 153);
Установите цвета с помощью 0-255 для каждого красного, зеленого и синего цветов, а затем в любом месте, где вы хотите, чтобы этот цвет использовал только MY_COLOR вместо Color.BLUE или Color.RED или любые другие статические цвета, предлагаемые классом Color.
Просто выполните поиск Google по цветовой диаграмме, и вы можете найти диаграмму с правильными кодами RGB, используя 0-255.
Попробуйте следующее:
vi.setBackgroundColor(Color.parseColor("#FFFF0000"));
Файл 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"/>
Попробуйте вместо этого использовать 0xFFF000 и передайте это в метод Color.HSVToColor.
В Xamarin Используйте это
Control.SetBackgroundColor(global::Android.Graphics.Color.ParseColor("#F5F1F1"));
Если вы определяете цвет в своем XML и хотите использовать его для изменения цвета фона или чего-то подобного, этот API является тем, который вы ищете:
((TextView) view).setBackgroundResource(R.drawable.your_color_here);
В моем примере я использовал его для TestView
Для сокращенного шестнадцатеричного кода
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);