Я хотел бы использовать цвет из строки гекса, например, "#FFFF0000"
чтобы (скажем) изменить цвет фона макета.
Color.HSVToColor
выглядит как победитель, но он принимает float[]
в качестве параметра.
Я вообще близок к решению?
Я хотел бы использовать цвет из строки гекса, например, "#FFFF0000"
чтобы (скажем) изменить цвет фона макета.
Color.HSVToColor
выглядит как победитель, но он принимает float[]
в качестве параметра.
Я вообще близок к решению?
Ответы:
Попробуйте Color
метод класса:
public static int parseColor (String colorString)
Из документации Android :
Поддерживаемые форматы: #RRGGBB #AARRGGBB «красный», «синий», «зеленый», «черный», «белый», «серый», «голубой», «пурпурный», «желтый», «светло-серый», «темно-серый» '
#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] == '#')
Пытаться:
myLayout.setBackgroundColor(Color.parseColor("#636161"));
Этот вопрос задается для нескольких запросов, связанных с шестнадцатеричным цветом, поэтому я добавлю резюме здесь.
Шестнадцатеричные цвета принимают форму 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
цвет , который может быть использован в setBackgroundColor
иsetTextColor
String string = "#FFFF0000";
int color = Integer.parseInt(string.replaceFirst("^#",""), 16);
16 означает, что он шестнадцатеричный, а не обычный 0-9. Результат должен быть таким же, как
int color = 0xFFFF0000;
#80000000
в этом случае версия int будет int color = 0x80000000;
. Если это не сработает, тогда опубликуйте новый вопрос с более подробной информацией, чтобы больше людей, чем я, заметили это. Имейте в виду #80000000
, это полупрозрачный черный цвет.
Это
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.
В Xamarin Используйте это
Control.SetBackgroundColor(global::Android.Graphics.Color.ParseColor("#F5F1F1"));
Файл 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.