Як отримати колір із шістнадцяткової кольорової рядки


305

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

Я взагалі близький до рішення?


Відповіді:


592

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

public static int parseColor (String colorString)

З документації на Android :

Підтримуються формати: #RRGGBB #AARRGGBB 'червоний', 'блакитний', 'зелений', 'чорний', 'білий', 'сірий', 'блакитний', 'пурпуровий', 'жовтий', 'lightgray', 'darkgray '


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

6
Щоб додати до коду @ xdevs23, змініть умову if на цю:if(colorString.length() == 4 && colorString[0] == '#')
Зак

Ваша відповідь буде кращою, якщо ви не лише покажете функцію, але і як її використовувати: 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);

Колір від String

Як зазначали інші, ви можете використовувати Color.parseStringтак

int myColor = Color.parseColor("#3F51B5");
myView.setBackgroundColor(myColor);

Зауважте, що рядок повинен починатися з а #. Обидва RRGGBBі AARRGGBBформати підтримуються.

Колір від XML

Ви дійсно повинні отримувати свої кольори з XML, коли це можливо. Це рекомендований варіант, оскільки це значно спрощує внесення змін у додаток до кольору. Якщо ви встановите багато шістнадцяткових кольорів у всьому своєму коді, це спробувати змінити їх пізніше.

Дизайн матеріалів Android має кольорові палітри з уже налаштованими шестигранними значеннями.

Ці кольори теми використовуються у вашій програмі та виглядають так:

кольори.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. Спершу назвіть шістнадцятковий колір значення, а потім назвіть компонент вашого додатка, який повинен отримати певний колір. Це дозволяє легко регулювати кольори пізніше. Знову ж таки, це у кольорах.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

Клас «Колір» постачається з кількістю попередньо визначених кольорових констант. Ви можете використовувати його так.

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 color =?
Ашиш Саху

Я думаю, що строкова версія повинна була бути, #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 ​​/ color.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.