Преобразование шестнадцатеричного значения цвета (#ffffff) в целочисленное значение

88

Я получаю шестнадцатеричные значения цвета с сервера (в этой форме #xxxxxx, например, #000000для черного)

Как мне преобразовать это в целое число?

Я пытался сделать, Integer.valueOf("0x" + passedColor.substring(1, passedColor.length()))чтобы получить еще более хекстастический 0x000000результат, но это не интерпретируется как intздесь, какие-либо другие предложения?

Я получаю сообщение об ошибке: 08-03 21:06:24.673: ERROR/AndroidRuntime(20231): java.lang.NumberFormatException: unable to parse '0x00C8FBFE' as integer

Я использую Android SDK для их setBackgroundColor(int color)функции, которая принимает, как вы уже догадались, целочисленное значение цвета.

Это ПРОТИВОПОЛОЖЕНИЕ этого вопроса: как преобразовать целое число цвета в шестнадцатеричную строку в Android?

CQM
источник
По какой-то причине я не могу опубликовать ... Вы почти у цели, но вам нужен метод с двумя аргументами valueOf, в котором вы указываете строковый ввод (без #, конечно) и систему счисления, определяющую базу. Integer.valueOf(passedColor.substring(1, passedColor.length()), 16) Это можно сделать с любой целочисленной базой! download.oracle.com/javase/6/docs/api/java/lang/… , int)
ty1824
Да, я тоже не смог опубликовать свой ответ. Майк Сэмюэл в значительной степени сказал то, что я собирался сказать.
ssell

Ответы:

183

Настоящий ответ - использовать:

Color.parseColor(myPassedColor)в Android myPassedColor- hexзначение, подобное #000или #000000или #00000000.

Однако эта функция не поддерживает сокращенные шестнадцатеричные значения, такие как #000.

CQM
источник
9
К сожалению, in не разбирает значение вроде #000. См. Документацию
Алекс Семенюк
@CQM, как разбирать сокращенный шестнадцатеричный цвет, например #ccc. Есть ли другой способ?
Kavita_p
30

Ответ действительно прост, ребята, в Android, если вы хотите преобразовать шестнадцатеричный цвет в int, просто используйте класс Android Color , пример, показанный ниже

это для светло-серого цвета

Color.parseColor("#a8a8a8");

Вот и все, и вы получите свой результат.

Ашана.Джаколь
источник
И просто проясните, как использовать: someText.setTextColor (Color.parseColor ("# f9e6ff"))
Брайан М.
15
Integer.parseInt(myString.replaceFirst("#", ""), 16) 
Майк Сэмюэл
источник
2
спасибо за предложение, я пробовал это только сейчас безрезультатно, и оказалось, что включенная функция Android была единственным типом цветового результата, который работает, хотя оба они возвращают int. Color.parseColor (myPassedColor)) Я не думал, что это проблема Android, но оказалось, что это так
CQM 04
4
Я не знаю, почему люди проголосовали за это; не работает !! Цвета здесь хранятся в 32-битном формате, поэтому при их печати они отображаются как длинные. parseInt ищет явный `- 'для обозначения отрицательного числа и не принимает во внимание знаковый бит для целых или длинных чисел. Таким образом, он даст неправильный номер.
Christian Chapman
1
@enthdegree, процитирую OP: «Я получаю шестнадцатеричные значения цвета с сервера (в этой форме #xxxxxx», поэтому цвета, с которыми работает OP, - это 24 бита, а не 32 бита; альфа-канал отсутствует.
Майк Самуэль
1
@AllDayAmazing, '#' не является шестнадцатеричной цифрой, знаком или десятичным разделителем, поэтому parseIntне удастся, если найдет его на входе.
Майк Сэмюэл
Моя ошибка, я настолько укоренился в том, что делаю, что быстро прочитал и увидел parseColor(). Вы очень правы.
AllDayAmazing
7

У меня та же проблема, что я нашел цвет в форме, #AAAAAAи я хочу преобразовать его в форму, которую мог бы использовать Android. Я обнаружил, что вы можете просто использовать, 0xFFAAAAAAчтобы Android мог автоматически определять цвет. Обратите внимание, что первое FFговорит о alphaценности. Надеюсь, это поможет

Фэй
источник
4

Настоящий ответ - это самый простой и легкий ....

String white = "#ffffff";
int whiteInt = Color.parseColor(white);
Милад Фаридния
источник
3

Я столкнулся с той же проблемой. Таким образом я смог ее решить. Как сказал CQM, использование Color.parseColor () - хорошее решение этой проблемы.

Вот код, который я использовал:

this.Button_C.setTextColor(Color.parseColor(prefs.getString("color_prefs", String.valueOf(R.color.green))));

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

Бегущие колеса
источник
1

Получить цветовой код общих настроек в строке, затем преобразовать в целое число и добавить цвет фона макета:

    sharedPreferences = getSharedPreferences(mypref, Context.MODE_PRIVATE);
    String sw=sharedPreferences.getString(name, "");
    relativeLayout.setBackgroundColor(Color.parseColor(sw));
Чоудри Заман
источник
0

Попробуйте это, создайте рисование в своем ресурсе ...

<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="@color/white"/>
    <size android:height="20dp"
        android:width="20dp"/>
</shape>

затем используйте ...

 Drawable mDrawable = getActivity().getResources().getDrawable(R.drawable.bg_rectangle_multicolor);
mDrawable.setColorFilter(Color.parseColor(color), PorterDuff.Mode.SRC_IN);
mView1.setBackground(mDrawable);

с цветом ... "#FFFFFF"

если цвет прозрачный, используйте ... setAlpha

mView1.setAlpha(x); с плавающей точкой x 0-1 Ej (0.9f)

Удачи

Гастон Куфре
источник