Перетворити значення шістнадцяткового кольору (#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?


Оскільки з якихось причин я не можу розмістити повідомлення ... Ви майже готові, але вам потрібен valueOfметод з двома аргументами , де ви вказуєте рядок вводу (без #, звичайно) та radix, який визначає базу. Integer.valueOf(passedColor.substring(1, passedColor.length()), 16) Це можна зробити з будь-якою цілочисельною базою! download.oracle.com/javase/6/docs/api/java/lang/… , int)
ty1824

Так, я також не зміг опублікувати свою відповідь. Майк Семюел майже сказав те, що я збирався сказати.
ssell

Відповіді:


182

Справжня відповідь полягає у використанні:

Color.parseColor(myPassedColor)в Android myPassedColor- hexзначення як #000або #000000або #00000000.

Однак ця функція не підтримує скорочені шістнадцяткові значення, такі як #000.


9
На жаль, не аналізує значення, як #000. Дивіться документацію
Алекс Семенюк

@CQM як проаналізувати скорочений шістнадцятковий колір, наприклад #ccc. Чи є інший спосіб?
Kavita_p

30

Відповідь дуже прості, хлопці, в android, якщо ви хочете перетворити шістнадцятковий колір у int, просто використовуйте клас кольорів android , приклад показаний нижче

це для світло-сірого кольору

Color.parseColor("#a8a8a8");

Ось і ви отримаєте свій результат.


І просто поясніть, як використовувати: someText.setTextColor (Color.parseColor ("# f9e6ff"))
Брайан М

15
Integer.parseInt(myString.replaceFirst("#", ""), 16) 

2
дякую за пропозицію, я спробував це зараз безрезультатно, і виявляється, що включена функція Android була єдиним кольоровим результатом, який працює, хоча вони обидва повертають int. Color.parseColor (myPassedColor)) Я не думав, що це особлива проблема для Android, але виявляється, що це було
CQM

4
Я не знаю, чому люди це підтримали; це не працює !! Тут кольори зберігаються у 32 бітах, тому їх друк змушує їх відображатися як довгі. parseInt шукає явне `- 'для позначення негативу і не поважає знаковий біт для ints або longs. Таким чином він дасть неправильний номер.
Крістіан Чепмен

1
@enthdegree, Процитуючи OP, "Я отримую шістнадцяткові значення кольору з сервера (у цій формі #xxxxxx", тому кольори, з якими має справу OP, складають 24 біти, а не 32 біти; альфа-каналу немає.
Майк Семюел

1
@AllDayAmazing, '#' не є шістнадцятковою цифрою, знаком або десятковим роздільником, тому parseIntне зможе, якщо знайде його на вході.
Mike Samuel

Моя помилка, я настільки вкоренився в те, що роблю, що швидко прочитав і побачив parseColor(). Ви дуже праві.
AllDayAmazing

7

У мене та сама проблема, що я знайшов якийсь колір у формі, #AAAAAAі я хочу перетворити його у форму, якою міг би користуватися андроїд. Я виявив, що ви можете просто використовувати, 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)

Щасти

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.