Konwertuj szesnastkową wartość koloru (#ffffff) na wartość całkowitą

88

Otrzymuję wartości koloru szesnastkowego z serwera (w tej formie #xxxxxx, na przykład #000000dla czarnego)

Jak przekonwertować to na wartość całkowitą?

Próbowałem Integer.valueOf("0x" + passedColor.substring(1, passedColor.length()))uzyskać jeszcze bardziej hextastyczny 0x000000wynik, ale nie jest to interpretowane jako inttutaj, jakieś inne sugestie?

Otrzymuję błąd: 08-03 21:06:24.673: ERROR/AndroidRuntime(20231): java.lang.NumberFormatException: unable to parse '0x00C8FBFE' as integer

Używam Android SDK do ich setBackgroundColor(int color)funkcji, który przyjmuje - jak można się domyślić - całkowitą wartość koloru.

To jest PRZECIWIEŃSTWO tego pytania: Jak przekonwertować liczbę całkowitą koloru na ciąg szesnastkowy w systemie Android?

CQM
źródło
Z jakiegoś powodu nie mogę opublikować ... Już prawie gotowe, ale potrzebujesz valueOfmetody dwuargumentowej , w której podajesz ciąg wejściowy (oczywiście bez #) i podstawę, która określa podstawę. Integer.valueOf(passedColor.substring(1, passedColor.length()), 16) Można to zrobić z dowolną liczbą całkowitą! download.oracle.com/javase/6/docs/api/java/lang/… , int)
ty1824
Tak, nie mogłem również opublikować mojej odpowiedzi. Mike Samuel jednak w zasadzie powiedział to, co miałem do powiedzenia.
ssell

Odpowiedzi:

183

Prawdziwą odpowiedzią jest użycie:

Color.parseColor(myPassedColor)w Androidzie, myPassedColorbędąc hexwartością taką jak #000lub #000000lub #00000000.

Jednak ta funkcja nie obsługuje skróconych wartości szesnastkowych, takich jak #000.

CQM
źródło
9
Niestety w nie analizuje wartości, takich jak #000. Zobacz dokumentację
Alex Semeniuk
@CQM jak analizować skrócony kolor szesnastkowy, na przykład #ccc. Czy jest inny sposób?
Kavita_p
30

Odpowiedź jest naprawdę prosta, w Androidzie, jeśli chcesz przekonwertować kolor szesnastkowy na int, po prostu użyj klasy Android Color , przykład pokazany poniżej

to jest dla jasnoszarego koloru

Color.parseColor("#a8a8a8");

To wszystko, a otrzymasz wynik.

Ashana.Jackol
źródło
I po prostu wyjaśnij, jak używać: someText.setTextColor (Color.parseColor ("# f9e6ff"))
Brian M
15
Integer.parseInt(myString.replaceFirst("#", ""), 16) 
Mike Samuel
źródło
2
dzięki za sugestię, próbowałem tego teraz bezskutecznie i okazuje się, że dołączona funkcja Androida była jedynym rodzajem wyniku koloru, który działa, mimo że oba zwracają int. Color.parseColor (myPassedColor)) Nie sądziłem, że to problem specyficzny dla Androida, ale okazuje się, że tak
CQM
4
Nie wiem, dlaczego ludzie to popierali; to nie działa !! Kolory są tutaj przechowywane w 32 bitach, więc drukowanie ich powoduje, że są wyświetlane jako długie. parseInt szuka jawnego `- 'oznaczającego wartość ujemną i nie uwzględnia bitu znaku dla liczb int lub long. W ten sposób poda błędną liczbę.
Christian Chapman
1
@enthdegree, cytując OP: „Otrzymuję wartości koloru szesnastkowego z serwera (w tym formularzu #xxxxxx”), więc kolory, którymi operuje OP, mają 24 bity, a nie 32 bity; nie ma kanału alfa.
Mike Samuel
1
@AllDayAmazing, „#” nie jest cyfrą szesnastkową, znakiem ani separatorem dziesiętnym, więc parseIntzakończy się niepowodzeniem, jeśli znajdzie go na wejściu.
Mike Samuel
Mój błąd, jestem tak zakorzeniony w tym, co robię, że szybko to przeczytałem i zobaczyłem parseColor(). Masz bardzo rację.
AllDayAmazing
7

Mam ten sam problem, w którym znalazłem jakiś kolor w postaci #AAAAAAi chcę przekształcić to w formę, z której mógłby skorzystać Android. Odkryłem, że możesz po prostu użyć 0xFFAAAAAA, aby Android mógł automatycznie rozpoznać kolor. Zwróć uwagę, że pierwsza FFmówi alphawartość. Mam nadzieję, że to pomoże

Fei
źródło
4

Prawdziwa odpowiedź brzmi: najprostsza i najłatwiejsza ....

String white = "#ffffff";
int whiteInt = Color.parseColor(white);
Milad Faridnia
źródło
3

Miałem ten sam problem. W ten sposób udało mi się to rozwiązać. Jak powiedział CQM, użycie Color.parseColor () jest dobrym rozwiązaniem tego problemu.

Oto kod, którego użyłem:

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

W tym przypadku moim celem była zmiana koloru tekstu przycisku (Button_C), gdy zmieniam wybór koloru z moich Preferencji (color_prefs).

RunningWheels
źródło
1

Uzyskaj kod koloru preferencji wspólnych w ciągu znaków, a następnie przekonwertuj na liczbę całkowitą i dodaj kolor tła układu:

    sharedPreferences = getSharedPreferences(mypref, Context.MODE_PRIVATE);
    String sw=sharedPreferences.getString(name, "");
    relativeLayout.setBackgroundColor(Color.parseColor(sw));
Choudry Zaman
źródło
0

Spróbuj tego, stwórz do rysowania w swoim zasobie ...

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

następnie użyj ...

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

z kolorem ... "#FFFFFF"

jeśli kolor jest przezroczysty, użyj ... setAlpha

mView1.setAlpha(x); z x float 0-1 Ej (0.9f)

Powodzenia

Gaston Cufre
źródło