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?


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:



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.


I po prostu wyjaśnij, jak używać: someText.setTextColor (Color.parseColor ("# f9e6ff"))
Brian M

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

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


4

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

String white = "#ffffff";
int whiteInt = Color.parseColor(white);

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).



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));

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.